5

VS2012 を使用して、プロジェクトのすべてのビルドでコードを生成しようとしています。

私のソリューションには3つのプロジェクトがあります:

  • プロジェクト1にはいくつかのクラスがあります
  • プロジェクト 2 には汎用テンプレートがあります
  • プロジェクト 3 には、json ファイルを読み取り、プロジェクト 2 から汎用テンプレートを呼び出してそのファイルを生成するテンプレートがあります。

Build/Transform All T4 Templates をクリックすると、問題なく生成されます。

しかし、ビルドごとにこのステップを自動的に含めるようにビルドを構成しようとしています。

このコードを csproj に追加しました:

<Import Project="$MsBuildToolsPath)\Microsoft.CSharp.Targets" />
<PropertyGroup>
   <TransformOnBuild>true</TransformOnBuild>
   <OverWriteReadOnlyOutputFiles>true</OverWriteReadOnlyOutputFiles>
</PropertyGroup>
<Import Project="$(MSBuildExtensionPath32)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"/>

PC で見つけたパス " \Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets " を作成しました。私が取った例は次のとおりです:get-visual-studio-to-run-a-t4-template-on-every-build

問題は、私が使用している次の行から発生します: <#@ include file="$(SolutionDir)\xxx\yyy\zzz\mytemplate.tt">

エラーが表示されます:

ファイルのインクルード テキストの解決に失敗しました: D:\Projects\pppp\qqq\eeee\$(SolutionDir)\xxx\yyy\zzz\mytemplate.tt

テンプレートは「手動で」生成された場合 (すべての T4 テンプレートのビルド/変換) にうまく機能するため、ビルド時にテンプレートを生成する際の問題は何でしょうか。

何か案が?

4

1 に答える 1

2

問題は、ビルド プロセス中にテンプレートを実行すると、別のホストで実行され、$(SolutionDir) マクロが存在しないことです。代わりに相対パスを使用してみてください。

<#@ include file="..\xxx\yyy\zzz\mytemplate.tt">
于 2012-10-09T14:17:07.097 に答える