我試圖讓我的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',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null的程序集已被導入。嘗試刪除其中一個引用或簽署它們以並排啓用。
我猜預處理程序處理程序集包含行,因爲它是沿兩個執行路徑發生,這會導致兩個程序集被引用。
想這太:
<#@ Assembly
name="$(SolutionDir)TestProject.Core/bin/$(Configuration)/TestProject.Core.dll"#>
有沒有辦法來添加$(配置)?這似乎是最合理的選擇
其他人似乎只是硬編碼調試他們的路徑。
引用錯誤的DLL並且不知道它在調試時非常煩人,並且在將代碼發佈到生產環境時無法順利進行。
你讓我想到我想要dll的原因,我想現在我只是複製我需要的模板中的代碼。我會接受這個答案,直到有其他事情出現。 – jSnake04
有些方法可以通過使用// <#+作爲註釋來使C#代碼可以被包含。這使得C#代碼既可編譯又可包含。如果你想要更多的細節,只需要問。 – FuleSnabel