【问题标题】:Determine solution configuration (debug/release) when running a T4 template to include assembly in the solution在运行 T4 模板以在解决方案中包含程序集时确定解决方案配置(调试/发布)
【发布时间】:2014-01-24 21:21:40
【问题描述】:

我正在尝试让我的 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”、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null 的程序集。尝试删除其中一个引用或对其进行签名以并排启用。

我猜预处理器会处理程序集包含行,因为它发生在两个执行路径上,导致两个程序集都被引用。

也试过这个:

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

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

其他人似乎只是在他们的路径中硬编码调试。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    希望对你有帮助

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

    【讨论】:

    • 你让我想到了我想要 dll 的原因,我想现在我只需复制我需要的模板中的代码。我会接受这个答案,直到出现其他问题。
    • 有一些方法可以通过使用 //
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多