从T4模板中获取当前解决方案的完整路径的最佳方法是什么?我现在拥有的是:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ output extension=".g.cs" #>
<#= "//" + this.DTE.Solution.FileName #>
<#+
private DTE dte;
private DTE DTE
{
get
{
if (this.dte == null)
{
var hostServiceProvider = (IServiceProvider)Host;
this.dte = (DTE)hostServiceProvider.GetService(typeof(DTE));
}
return this.dte;
}
}
#>
这有效,但我有一些顾虑:
SolutionClass
$(SolutionPath)
表示各种属性都是基础结构,仅供Microsoft使用我希望找到一种方法来使用MSBuild <#@ assembly name="$(ProjectDir)$(OutDir)Foo.dll" #>
属性。虽然它仍然有点VS,如果在MSBuild中生成将无法工作,它至少会更清洁。但是,我找不到在T4模板控件块中使用任何MSBuild属性的方法。
例如,这有效:
<# WriteLine("$(ProjectDir)"); #>
但这不是:
{{1}}
显然,该属性需要以某种方式进行转义,但我找不到任何有关如何实现此目的的文档。