1

我的要求是在构建发生时应该执行 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 的帖子在每个构建上运行 T4 模板,并且还遵循了@MarkGr 建议的步骤,但没有运气。

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

4

1 回答 1

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

于 2013-12-03T12:36:04.473 回答