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