我的要求是当构建发生时,应该执行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。谁能告诉我哪里出错了?
答案 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