通过MSBuild属性在T4模板中获取解决方案路径

时间:2015-04-01 00:39:33

标签: c# msbuild t4

从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;
    }
}
#>

这有效,但我有一些顾虑:

  • 它将我与DTE / COM层绑在一起,我发现它是许多问题的根源
  • 我必须拥有一个特定于主机的模板,这将限制未来的灵活性
  • SolutionClass $(SolutionPath)表示各种属性都是基础结构,仅供Microsoft使用

我希望找到一种方法来使用MSBuild <#@ assembly name="$(ProjectDir)$(OutDir)Foo.dll" #> 属性。虽然它仍然有点VS,如果在MSBuild中生成将无法工作,它至少会更清洁。但是,我找不到在T4模板控件块中使用任何MSBuild属性的方法。

例如,这有效:

<# WriteLine("$(ProjectDir)"); #>

但这不是:

{{1}}

显然,该属性需要以某种方式进行转义,但我找不到任何有关如何实现此目的的文档。

0 个答案:

没有答案