我试图让我的T4模板以实用的方式引用我的解决方案中的程序集,这样当我在调试和发布之间更改配置时,它将包括来自我的解决方案的正确程序集。
我尝试了以下方法:
当我尝试运行主T4时,遇到以下错误:
错误1 编译转换:已导入同一简单名称的程序集'TestProject.Core',版本=1.0.0.0,文化=中立,公钥令牌=null。请尝试删除其中一个引用或对它们进行签名以启用并行。
我猜处理器会处理程序集包含行,因为它沿着两个执行路径同时发生,这导致引用了两个程序集。
也尝试过这个:
我尝试了以下方法:
<#
// 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,文化=中立,公钥令牌=null。请尝试删除其中一个引用或对它们进行签名以启用并行。
我猜处理器会处理程序集包含行,因为它沿着两个执行路径同时发生,这导致引用了两个程序集。
也尝试过这个:
<#@ Assembly
name="$(SolutionDir)TestProject.Core/bin/$(Configuration)/TestProject.Core.dll"#>
有没有一种方法可以添加 $(Configuration)?这似乎是最合乎逻辑的选择。
其他人似乎只是在路径中硬编码 Debug。
引用错误的 DLL 并不知道这一点在调试时非常恼人,当发布代码到生产环境时,它也不会帮助事情顺利进行。