我有一个T4模板,可以处理我项目中的几个.tt文件.我还有一些我定义的自定义类来帮助代码转换过程.
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #>
Run Code Online (Sandbox Code Playgroud)
这适用于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" />
Run Code Online (Sandbox Code Playgroud)
我的构建运行,但我得到:
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets(407):主机在尝试解析程序集引用'$(TargetDir)\ MyDependency时抛出异常. DLL".转换不会运行.抛出以下异常:System.IO.FileLoadException:给定的程序集名称或代码库无效.(来自HRESULT的异常:0x80131047)System.Reflection.AssemblyName.nInit(RuntimeAssembly&assembly,Boolean forIntrospection,Boolean raiseResolveEvent)位于System.Reflection.AssemblyName.nInit()的Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation(String strongName)at at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost主机,TemplateProcessingSession会话)中的ResolveAssemblyReference(String assemblyReference).Line = -1,Column = -1
显然它不会$(TargetDir)在Team构建上下文中解析.
我尝试将TargetDir添加到我的构建配置的属性组中,但无济于事.该值不会传递到T4代码生成器的上下文.
我不想使用环境变量.
如何$(TargetDir)在Team Build上下文中正确设置?