私の要件は、ビルドが発生したときに 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 を使用しています。どこが間違っているのか誰にも教えてもらえますか?