运行T4模板以在解决方案中包含程序集时,确定解决方案配置(调试/发布)

时间:2014-01-24 21:21:41

标签: c# visual-studio-2012 dll .net-assembly t4

我正在尝试让我的T4模板以实用的方式在我的解决方案中引用我的程序集,这样当我在调试和发布之间更改配置时,它将包含我的解决方案中的正确程序集。

这就是我的尝试:

<#
    // Figured out how to get the current Configuration
    var serviceProvider = Host as IServiceProvider;
    var dte = serviceProvider.GetService(typeof(DTE)) as DTE;
    string ConfigName = dte.Solution.SolutionBuild.ActiveConfiguration.Name;

    // I have verified that I am getting the strings "Debug", and "Release"
    if (configName == "Debug") { 
#>
    <#@ include file="template.Debug.tt" #>
<# } else { #>
    <#@ include file="template.Release.tt" #>
<# } #>

template.Debug.tt文件如下所示:

<#@ Assembly 
name="$(SolutionDir)TestProject.Core/bin/Debug/TestProject.Core.dll"#>

template.Release.tt文件如下所示:

<#@ Assembly 
name="$(SolutionDir)TestProject.Core/bin/Release/TestProject.Core.dll"#>

当我尝试运行主T4时,我收到此错误:

错误1编译转换:已导入具有相同简单名称“TestProject.Core”,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null的程序集。尝试删除其中一个引用或签名以并排启用。

我猜测预处理器会处理程序集include行,因为它沿着两个执行路径发生,导致两个程序集都被引用。

也试过这个:

<#@ Assembly 
name="$(SolutionDir)TestProject.Core/bin/$(Configuration)/TestProject.Core.dll"#>

有没有办法添加$(配置)?这似乎是最合乎逻辑的选择

其他人似乎只是在他们的路径中对Debug进行硬编码。

引用错误的DLL而不知道它在调试时非常烦人,并且在将代码发布到生产环境时无法顺利进行。

1 个答案:

答案 0 :(得分:0)

一个想法是你的T4支持dll可以被认为是构建环境的一部分,因此Debug / Relase不适用。

对于支持dll,更改所有配置的构建路径,例如$(SolutionDir)\ BuildArtifacts并在T4文件中引用该位置。

希望这有帮助

PS。 我所做的(虽然我知道我是少数)是因为部分原因而避免使用T4支持dll而只是将所有内容写成T4“脚本”。