我有一个 T4 模板,可以处理项目中的多个 .tt 文件。我还定义了一些自定义类来帮助完成代码转换过程。
<#@ 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\Microsoft\VisualStudio\TextTemplated\v10.0\Microsoft.TextTemplated.targets
(407): 主机在尝试解决问题时抛出异常
程序集引用“$(TargetDir)\MyDependency.dll”。转变
将不会被运行。抛出以下异常:
System.IO.FileLoadException:给定的程序集名称或代码库是
无效的。 (HRESULT 异常:0x80131047)
System.Reflection.AssemblyName.nInit(RuntimeAssembly& 程序集,
内省的布尔值、raiseResolveEvent 的布尔值)
System.Reflection.AssemblyName.nInit() 位于
Microsoft.VisualStudio.TextTemplate.GlobalAssemblyCacheHelper.GetLocation(字符串
强名称)在
Microsoft.VisualStudio.TextTemplated.Sdk.Host.GenericTextTemplatedHost.ResolveAssemblyReference(字符串
装配参考)位于
Microsoft.VisualStudio.TextTemplate.Engine.ResolveAssemblyReferences(ITextTemplatedEngineHost
主机、TemplateProcessingSession 会话)。行=-1,列=-1
显然不会解决$(TargetDir)
在团队建设背景下。
我尝试将 TargetDir 添加到我的构建配置的属性组中,但无济于事。该值不会传递到 T4 代码生成器的上下文。
我不想使用环境变量。
我该如何设置$(TargetDir)
在 Team Build 环境中正确吗?
我没有看到 $(OutputPath) 是由 Visual Studio 定义的。您是否在项目中的项目中尝试过 $(TargetDir) ?然后,您可以从 T4 文件的程序集声明中删除 $(TargetDir)\。
我刚刚尝试了很多可能性来获得与工作类似的东西,今天或明天会写一篇博客文章。
So:
<ItemGroup>
<T4ReferencePath Include="$(TargetDir)" />
</ItemGroup>
在你的 csproj 中,并且
<#@ assembly name="MyDependency.dll" #>
在你的T4文件中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)