プロジェクト内のいくつかの.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)
チームビルドコンテキストで正しく設定するにはどうすればよいですか?