2012-10-09 12 views
5

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

私は、溶液中の3つのプロジェクトがあります。

  • プロジェクト1は、いくつかのクラスを持っている
  • プロジェクト2プロジェクト3は、JSONファイルを読み込んでジェネリックを呼び出すテンプレートを持ってい
  • 汎用テンプレートを持っていますテンプレートフォームプロジェクト2を使用してファイルを生成します。

ビルド/トランスフォームのすべてのT4テンプレートをクリックしても、問題はありません。生成は順調に進んでいます。

しかし、すべてのビルドでこの手順を自動的に組み込むようにビルドを設定しようとしています。

私は私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"/> 

の "Microsoft \ VisualStudioを\ を\ v11.0 \ TextTemplating Microsoft.TextTemplating.targets \" 何からI私のPCに見つかりました。 私からそれを取った例があった。 <#@をファイルが含ま= "$(SolutionDir)\ XXX \ YYY \ ZZZの\のmytemplate.tt">

:問題は、私が使用しています。このラインから来 get-visual-studio-to-run-a-t4-template-on-every-build

と、私はエラーが表示さ:

は、ファイルのテキストを含める解決に失敗しました: D:プロジェクト\ \ PPPP \ QQQ \ EEEE \ $(SolutionDir)\ XXX \ YYY \ ZZZの\のmytemplate.tt

テンプレートは「手で」(T4テンプレートのビルド/トランスフォーム)で生成されたときにうまく動作するので、ビルド時に何が問題になるのだろうかと思います。

答えて

2

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

<#@ include file="..\xxx\yyy\zzz\mytemplate.tt"> 
+0

これは組み込み関数では動作しますが、アセンブリはどうですか?私はそれらを見つけるために$(SolutionDir)を使いました、私は同じ種類のエラーを持っています。指定されたアセンブリ名またはコードベースが無効です。あなたの助けにThx。 – Arthis

+0

私は最終的に絶対パスを使用しました。他の何かが正常に動作していたからです。 – Arthis

+0

私は相対パスで何が問題なのか分かりませんが、 'Host.ResolvePath'メソッドを試すことができます –

関連する問題