我有一个T4模板,它会处理我项目中的几个.tt文件。我还定义了一些自定义类来帮助代码转换过程。
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #>
这在Visual Studio中有效,我有一个VS宏定义了 $(TargetDir) 的正确值。
现在,我想在构建过程中执行代码生成过程。我添加了:
<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) at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReference(String assemblyReference) at Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost host, TemplateProcessingSession session). 行=-1, 列=-1
显然在 Team build 上下文中无法解析 $(TargetDir)
。
我尝试将 TargetDir 添加到我的构建配置属性组,但没有成功。该值未能传递到 T4 代码生成器的上下文中。
我不想使用环境变量。
如何在 Team Build 上下文中正确设置 $(TargetDir)
?