9

プロジェクト内のいくつかの.ttファイルを処理するT4テンプレートがあります。また、コード変換プロセスを支援するために定義したカスタムクラスもいくつかあります。

<#@ template language="C#"  hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #> 

これはVisualStudioで機能し、$(TargetDir)を正しく定義するVSマクロがあります。

ここで、ビルドプロセス中にコード生成プロセスを実行したいと思います。追加した:

<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup>
<T4ReferencePath Include="$(OutputPath)" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

ビルドは実行されますが、次のようになります。

C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ TextTemplating \ v10.0 \ Microsoft.TextTemplating.targets(407):アセンブリ参照'$(TargetDir)\ MyDependencyを解決しようとしたときに、ホストが例外をスローしました。 dll'。変換は実行されません。次の例外がスローされました:System.IO.FileLoadException:指定されたアセンブリ名またはコードベースが無効でした。(HRESULTからの例外:0x80131047)at System.Reflection.AssemblyName.nInit(RuntimeAssembly&assembly、Boolean forIntrospection、Boolean raiseResolveEvent)at System.Reflection.AssemblyName.nInit()at Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation(String strongName) Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost。Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHostホスト、TemplateProcessingSessionセッション)のResolveAssemblyReference(String assemblyReference)。行=-1、列=-1

$(TargetDir)明らかに、チームビルドのコンテキストでは解決されません。

TargetDirをビルド構成のプロパティグループに追加しようとしましたが、役に立ちませんでした。この値は、T4コードジェネレーターのコンテキストには渡されません。

環境変数を使いたくありません。

$(TargetDir)チームビルドコンテキストで正しく設定するにはどうすればよいですか?

4

1 に答える 1

5

$(OutputPath) がビジュアルスタジオによって定義されている場所がわかりません。プロジェクト内のアイテムで $(TargetDir) を試しましたか? 次に、T4 ファイルのアセンブリ宣言から $(TargetDir)\ を削除できます。

私は仕事に似たものを得るために多くの可能性を試しました.今日または明日ブログ投稿を行う予定です.

そう:

<ItemGroup>
    <T4ReferencePath Include="$(TargetDir)" />
</ItemGroup>

あなたのcsprojで、そして

<#@ assembly name="MyDependency.dll" #>

T4ファイルで

于 2013-06-12T17:07:25.993 に答える