2017-01-09 56 views
0

我正在使用T4文本模板生成用于任何c#项目的C#类。 但是,现在我需要知道目标项目执行文件的名称,然后才知道配置文件的名称和...T4获取当前解决方案的执行文件名

对于这份工作,我试图吹码,但我认为不稳定的所有项目。

<#@ template language="C#" debug="false" hostspecific="true" #> 
<#@ assembly name="EnvDTE" #> 
<#@ import namespace="EnvDTE" #> 
<#@ output extension=".cs" #> 

<# 
IServiceProvider serviceProvider = (IServiceProvider)this.Host; 
var dte = serviceProvider.GetService(typeof(DTE)) as DTE; 
var solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)"); 
var projectItem = dte.Solution.FindProjectItem(Host.TemplateFile); 
var vsProject = projectItem.ContainingProject; 
#> 

1.<#= System.IO.Path.GetFileName(dte.Solution.FullName) #> 
2.<#= solutionsPath #> 
3.<#= this.Host.ResolveParameterValue("-", "-", "projects") #> 
4.<#= dte.Solution.FullName #> 
5.<#= vsProject.Name #> 

结果是:

1.ProjectName.sln 
2.D:\MyProject\SolutionDirectory\src\ 
3.ProjectName1|ProjectName2|ProjectName3 
4.D:\MyProject\SolutionDirectory\src\ProjectName.sln 
5.ProjectName 

请帮我找一个稳定和安全的方式来获得当前项目执行文件名,例如:projectname.exe$(TargetFileName)

+0

http://stackoverflow.com/questions/5497064/c-how-to-get-the-full-path-of-runni ng进程 – Unlockedluca

+0

@Unlockedluca谢谢,但[这个问题](http://stackoverflow.com/questions/5497064/c-how-to-get-the-full-path-of-running-process)是为运行时项目不适用于T4文本模板。并在T4得到这个:'devenv.exe' – Behzad

回答

1

试试这个:

ProjectItem projItem = dte.Solution.FindProjectItem(Host.TemplateFile); 
Project prj = projItem.ContainingProject; 
string outputFileName = prj.Properties.Item("OutputFileName").Value.ToString(); 
相关问题