私のプロジェクトでいくつかの.ttファイルを処理するT4テンプレートがあります。コード変換プロセスを支援するために定義したカスタムクラスもいくつかあります。ビルド中のT4コード生成、カスタムアセンブリ参照
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #>
これはVisual Studioで動作しますが、これは$(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:\プログラムファイル (x86の)\ MSBuildの\マイクロソフト\ VisualStudioを\ TextTemplating \ V10.0 \ Microsoft.TextTemplating。ターゲット (407): アセンブリ参照 '$(TargetDir)\ MyDependency.dll'を解決しようとしているときにホストが例外をスローしました。変換 は実行されません。次の例外がスローされました: System.IO.FileLoadException:指定されたアセンブリ名またはコードベースが無効 でした。 (HRESULTからの例外:0x80131047) System.Reflection.AssemblyName.nInit(RuntimeAssembly &アセンブリ、 ブールforIntrospection、ブールraiseResolveEvent)で System.Reflection.AssemblyName.nInitで() Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocationで Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferencesでMicrosoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReferenceで(文字列 厳密な名前)(文字列 assemblyReference)(ITextTemplatingEngineHost ホスト、TemplateProcessingSessionセッション)。行= -1、列= -1
明らかにチームビルドコンテキストでは$(TargetDir)
が解決されません。
ビルド構成のプロパティグループにTargetDirを追加しようとしましたが、無駄です。この値は、T4コードジェネレータのコンテキストに渡されません。
私は環境変数を使いたくありません。
チームビルドのコンテキストで$(TargetDir)
を正しく設定するにはどうすればよいですか?
オレグSychは、MSBuildの統合について書いた: ます。http://www.olegsychを。com/2010/04/understanding-t4-msbuild-integration /#IncludeFolders。私はそれがあなたの問題を解決するかどうかは分からないが、それはその話題に関するかなり良いガイドであるようだ。 – FuleSnabel
ええ、そこにサイコロ.. –