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 to run a T4 Template on every buildを見て、@ 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 に答える