2011-03-31 65 views
1

讓我們假裝我們有以下服務器[開發,測試,生產],並且開發和測試在配置上非常相似,而生產卻非常不同。web.config變換可以鏈接嗎?

如果我使用web.config轉換,這意味着我必須複製Web.dev.config和Web.test.config中的很多設置。如果我可以對我的變換使用相同的變換機制,以便test.config基於dev.config,那將會非常好。

我已經想到了兩種可能的方法,我不知道任何人會的工作:

  • 試圖讓MSBuild的第一變換dev.config,然後對結果運行test.config我們什麼時候正在測試配置下運行
  • 試圖讓轉換機制爲轉換文件工作。我會以某種方式針對dev.config運行test.config並創建一個臨時文件,然後將其用作針對Web.config的轉換。

有沒有人知道這樣的事情是否可能?如果是的話,人們會怎麼設置它?

回答

1

TransformXml只是在編譯後調用的MSBUILD任務。如果你擴展/修改你的版本,你可以讓它運行兩次轉換任務,或者讓你的配置正常運行,然後提供第二個文件並使用任務來執行。

如果你熟悉msbuild,這很簡單。如果沒有,回覆/評論,我會盡力在今天晚些時候提供例子。

但是最終,它有可能,因爲我對過去的項目有類似的需求。

1

我有更多的配置。所有這些都與T4同步。看到我的回答here

+0

有趣的方法。包含文件的能力看起來非常好。我認爲有一些地方.config轉換雖然更好。例如,當涉及到替換/刪除部分時,可以做得更多。或者我錯過了什麼? – 2011-03-31 21:22:10

+0

我同意你的意見。基於T4的方法適用於僅更改配置字符串中的值或添加/刪除一個或兩個部分的情況。 – 2011-04-01 05:59:10

1

儘管已經回答了這個問題,但我想用一個反映Visual Studio 2012中所做更改的答案對其進行更新,使其變得相當容易。

從Visual Studio 2012開始,可以「鏈接」構建和發佈配置文件轉換。因此,您可以擁有一個「發佈」構建轉換,負責處理常見配置,如關閉調試,切換自定義錯誤以及與發佈配置文件關聯的任意數量的「發佈」轉換,添加實例特定的數據,如連接字符串和appSettings。

在VS 2012中(以及通過 Azure SDK發佈VS2010更新)現在支持發佈特定變換的概念。您 現在還可以指定用於配置文件中的項目配置時 出版發佈對話框上...

在這種情況下,我已經創建了一個名爲型材生產,並設置 配置發佈。當我發佈此項目時,將按照此順序應用以下 轉換(如果文件存在)。

1.web.release.config

2.web.production。config

有關更多信息,請參閱Profile specific web.config transforms and transform preview

+0

太棒了!將不得不研究這一點 – 2013-10-16 06:40:49