簡體   English   中英

運行T4模板以在解決方案中包含程序集時,確定解決方案配置(調試/發布)

[英]Determine solution configuration (debug/release) when running a T4 template to include assembly in the solution

我試圖讓我的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而不知道它是非常煩人的,並且在將代碼發布到生產環境時無法順利進行。

一個想法是您的T4支持DLL可以被認為是構建環境的一部分,因此Debug / Relase不適用。

對於支持dll,更改所有配置的構建路徑,例如$(SolutionDir)\\ BuildArtifacts並在T4文件中引用該位置。

希望這可以幫助

PS。 我所做的(雖然我知道我是少數)是因為部分原因而避免使用T4支持dll而只是將所有內容寫成T4“腳本”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM