.net T4生成期间的代码生成,自定义程序集参考

.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" #

我有一个T4模板,可以处理项目中的几个.tt文件。我还定义了一些自定义类来帮助代码转换过程

<#@ 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" #>