3

テキスト テンプレートを使用T4して、C# プロジェクトで使用する C# クラスを生成しています。しかし、今度はターゲットプロジェクトの実行ファイル名を知る必要があり、次にその構成ファイル名を知る必要があります...

この仕事のために私はコードを吹き飛ばそうとしましたが、すべてのプロジェクトで安定しているとは思いません.

<#@ 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)

4

1 に答える 1