.net T4生成期间的代码生成,自定义程序集参考
我有一个T4模板,可以处理项目中的几个.tt文件。我还定义了一些自定义类来帮助代码转换过程.net T4生成期间的代码生成,自定义程序集参考,.net,msbuild,t4,.net,Msbuild,T4,我有一个T4模板,可以处理项目中的几个.tt文件。我还定义了一些自定义类来帮助代码转换过程 <#@ template language="C#" hostspecific="True" debug="True" #> <#@ output extension="cs" #> <#@ assembly name="System.Core.dll" #> <#@ assembly name="$(TargetDir)\MyDependency.dll" #
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #>
这在VisualStudio中工作,我有一个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" />
true
真的
真的
我的构建运行,但我得到:
C:\程序文件
(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,
布尔值用于内省,布尔值RAISERESOVEREVENT)位于
System.Reflection.AssemblyName.nInit()位于
Microsoft.VisualStudio.TextTemplateing.GlobalAssemblyCacheHelper.GetLocation(字符串
strong名称)在
Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingGhost.ResolveAssemblyReference(字符串
汇编参考)在
Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost
主机,TemplateProcessingSession会话)。行=-1,列=-1
显然,它不会在团队构建上下文中解析$(TargetDir)
我尝试将TargetDir添加到构建配置的属性组中,但没有成功。此值不会传递到T4代码生成器的上下文
我不想使用环境变量
如何在团队构建上下文中正确设置$(TargetDir)
?我看不出visual studio在哪里定义了$(OutputPath)。您是否在项目中的项目中尝试了$(TargetDir)?然后可以从T4文件中的程序集声明中删除$(TargetDir)
我刚刚经历了一系列类似工作的可能性,将在今天或明天写一篇博文
因此:
在您的csproj中,以及
<#@ assembly name="MyDependency.dll" #>
在T4文件中Oleg Sych写到了msbuild集成:。我不知道它是否解决了你的问题,但它似乎是一个很好的主题指南。这里是承诺的博客文章。抱歉迟到了!
<#@ assembly name="MyDependency.dll" #>