带有构建过程的T4模板

时间:2012-12-05 15:54:19

标签: templates msbuild visual-studio-2012 t4

我的要求是当构建发生时,应该执行T4模板 这是我在模板中编写的代码。

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>

<#@ assembly name="$(SolutionDir)dll\Newtonsoft.Json.dll" #>

<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO"#>
<#@ import namespace="System.Text"#>

<#@ import namespace="Newtonsoft.Json"#>
<#@ import namespace="Newtonsoft.Json.Linq"#>

<#@ output extension=".txt" #>

<#

string serverPath = this.Host.ResolvePath("DLLs.js");

string body;
using (var stream = new FileStream(serverPath, FileMode.Open, FileAccess.Read))
{
    var streamReader = new StreamReader(stream);
    body = streamReader.ReadToEnd();

}

#>

<#=body#>

这样运行正常,但是当我尝试构建时,它提供了一个异常,它无法找到Newtonsoft DLL。

以下是我在项目文件中为解决方案构建时运行模板所做的工作。

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v11.0\Microsoft.TextTemplating.targets" />
<PropertyGroup>
 <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>

  <ItemGroup>
    <T4ReferencePath Include="$(VsIdePath)PublicAssemblies\" />
  </ItemGroup>

Newtonsoft.dll位于解决方案文件夹根目录中名为DLL的文件夹中。

我看到@ Get Visual Studio to run a T4 Template on every build的帖子,并且也遵循了@MarkGr建议的步骤,但没有运气。

我正在使用VS2012。谁能告诉我哪里出错了?

1 个答案:

答案 0 :(得分:1)

尝试使用此ItemGroup。它应该做的伎俩。至少在VS2013中

<ItemGroup>
    <T4ParameterValues Include="SolutionDir">
      <Value>$(SolutionDir)</Value>
    </T4ParameterValues>
  </ItemGroup>

http://blogs.msdn.com/b/t4/archive/2013/08/29/what-s-new-in-t4-for-visual-studio-2013.aspx