构建期间T4代码生成,定制组件参考(T4 code generation during build,

2019-08-02 03:03发布

我有一个在我的项目进程数.TT文件T4模板。 我也有我定义,以帮助该代码转换过程中的一些自定义类。

<#@ 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 \微软\ VisualStudio的\ TextTemplating \ V10.0 \ Microsoft.TextTemplating.targets(407):试图解决集引用“$(TARGETDIR)\ MyDependency主持人抛出异常。 DLL”。 转型将不会运行。 下引发的异常:System.IO.FileLoadException:给定的程序集名称或基本代码无效。 (从HRESULT异常:0x80131047)在System.Reflection.AssemblyName.nInit在Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation(字符串强名称)在(RuntimeAssembly&组件,布尔forIntrospection,布尔raiseResolveEvent)在System.Reflection.AssemblyName.nInit() Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReference(字符串assemblyReference)在Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost主机,TemplateProcessingSession会话)。 线= -1,柱= -1

很显然,这不会解决$(TargetDir)在团队建设方面。

我尝试添加TARGETDIR到我的构建配置的属性组,但无济于事。 此值好好尝试通过向T4代码生成器的情况下。

我不想使用环境变量。

如何设置$(TargetDir)正确的团队建设方面?

Answer 1:

我看不出其中$(OutputPath)是由Visual Studio定义。 你在你的项目尝试$(TARGETDIR)W /在你的项目? 然后你可以从T4文件的大会宣言删除$(TARGETDIR)\。

我刚刚通过的可能性摆努力得到类似工作的东西,今天或明天会做一个博客帖子。

所以:

<ItemGroup>
    <T4ReferencePath Include="$(TargetDir)" />
</ItemGroup>

在您的csproj,以及

<#@ assembly name="MyDependency.dll" #>

在T4文件



文章来源: T4 code generation during build, custom assembly reference
标签: .net msbuild t4