2011-07-14 79 views
2

我正在開發一個包含多個配置文件(Web,ConnectionStrings Windsor,Smtp,Appsettings,Nlog等)的環境(Local,Development,Main,Prod,Live)的項目。每個環境的配置文件

當前使用的策略是爲每個分支配置其中一個配置,並手動維護配置,而不是合併任何更改。

在這種設置下存儲和部署配置文件的更優雅的選項是什麼?

+0

這可能屬於http://programmers.stackexchange.com –

+0

這些天交流太多! – Dan

回答

0

通常我試圖將這些設置中的大部分保留在appSettings中(儘管我知道這不是他們的「官方」正確位置)。然後,我將appSettings分解爲一個environment.config文件,並通過configSource屬性在web.config引用中包含appSetting元素。

當我設置新的環境時,我手動設置該環境的environment.config文件。當我部署新版本時,我會從部署中排除environment.config文件,以使特定於環境的版本保持原樣。

這使您可以部署web.config的新副本以包含與項目相關的更改,同時將所有真正的環境特定設置保留在單獨的位置。

+0

使用msbuild切換文件? – Dan

+0

是的,你絕對可以使用MSbuild來交換文件,但我不想對你的構建環境做任何假設。無論如何,我使用TeamCity和NAnt進行構建,但我仍然使用這種方法進行配置,僅僅因爲它非常簡單。 –

0

一個優雅的解決方案是使用WebDeploy(來自Microsoft)部署您的Web應用程序。運行部署時,可以指定一個特定於站點的參數文件,該文件將用於替換web.config文件中的多個值。

對於部署,WebDeploy使用Visual Studio或msbuild可以創建的部署包。

這樣,我們可以首先在測試系統上部署一個部署包,運行多個測試,然後在通過測試時在多個服務器上進行部署而不進行任何更改。每個服務器都有其本地參數文件,幾乎不會更改,並且包含特定於站點的值。

0

將它們存儲在所有環境中具有相同名稱的文件服務器上。我不熟悉所有的配置,但大多數都有這樣做的方法。這種方法唯一的問題通常是dev/local,通常共享一個文件服務器,所以你必須手工改變本地。

如果實際上不能將配置指向文件服務器,那麼不太優雅的解決方案是在部署或啓動時通過bat文件將其拉下。似乎有很多選擇,而不是手工維護,這是錯誤的傾向。