2008-11-20 122 views
163

我需要在ASP.NET應用程序中使用不同的數據庫連接字符串和SMTP服務器地址,具體取決於它是在開發環境還是生產環境中運行。在開發和生產環境中使用不同的Web.config

該應用程序通過WebConfigurationManager.AppSettings屬性從Web.config文件讀取設置。

我使用Build/Publish命令通過FTP將應用程序部署到生產服務器,然後用正確的手動替換遠程Web.config。

是否有可能以某種方式簡化部署過程?謝謝!

回答

132

重新啓動在Visual Studio 2010及以上,您現在可以根據構建配置將轉換應用於web.config。

當創建一個web.config,可以擴大在Solution Explorer中的文件,你會看到兩個文件:

  • Web.Debug.Config
  • Web.Release.Config

它們包含了可以用來

  • 更改連接字符串轉換代碼
  • 刪除調試跟蹤和設置
  • 註冊錯誤頁面

請參閱MSDN上Web.config Transformation Syntax for Web Application Project Deployment以獲取更多信息。

儘管官方不支持,也可以將相同類型的轉換應用於非web應用程序文件。有關如何修改項目文件以將新任務添加到msbuild,請參閱Phil Bolduc blog

這是一個長期承受request on the Visual Studio Uservoice

extension for Visual Studio 2010及以上,「SlowCheetah」可用於爲任何配置文件創建轉換。從Visual Studio 2017.3開始,SlowCheetah has been integrated into the IDE和代碼庫由Microsoft管理。這個新版本也支持JSON轉換。

24

你看過web部署項目嗎?

http://www.microsoft.com/downloads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en

沒有爲VS2005版本爲好,如果你不是在2008年

+0

這是一個很好的使用web部署項目的指南:http://johnnycoder.com/blog/2010/01/07/deploy-aspnet-web-applications-with-web-deployment-projects/ – 2010-03-28 22:23:20

+0

2005版在這裏http://msdn.microsoft.com/en-us/library/aa479568.aspx – Fandango68 2014-02-24 00:41:43

+0

Web部署項目似乎是VS「發佈配置文件」現在http://www.diaryofaninja.com/blog/2012/08/ 26/visual-studio-2012-web-deployment-projects-are-dead-ndash-long-live-publishing-profiles – jocull 2015-09-30 04:09:25

13

我想知道,太。這有助於隔離問題對我來說

 
<connectionStrings configSource="connectionStrings.config"/> 

然後我保持connectionStrings.config以及一個「(東道國)connectionStrings.config」。這仍然是一個問題,但是如果您針對兩種環境中不同的部分執行此操作,則可以部署和版本相同的web.config。

(我不使用VS,順便說一句)

+0

如果你使用VS,你可以使用prebuild-events從debug.connectionstrings.config或a release.connectionstrings.config like: copy $(ProjectDir)$(ConfigurationName)ConnectionStrings.config $(ProjectDir)ConnectionStrings.config as s被Scott收購。 Hanselmann: http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx – Thomas 2010-01-04 13:42:37

3

企業庫配置編輯器可以幫助你做到這一點。它允許你創建一個基本配置文件,然後爲每個環境增量。然後,您可以合併基本配置和增量以創建特定於環境的web.config。看一下here的信息,它會比你更好地理解它。

3

您也可以將其設置爲構建後步驟。除Debug和Release之外,還要設置一個「Deploy」的新配置,然後在正確的web.config中進行生成後步驟拷貝。

我們對我們所有的項目都使用自動構建,並且構建腳本更新web.config文件以指向正確的位置。但是,如果你正在做VS中的所有事情,那不會對你有所幫助。

6

我使用NAnt構建腳本部署到我的不同環境。我已經通過XPath修改了我的配置文件,具體取決於它們被部署到的位置,然後使用Beyond Compare自動將它們放入該環境。

需要一兩分鐘的時間來設置,但您只需要一次。然後批量文件接管,而我去喝另一杯咖啡。 :)

Here's我發現它的一篇文章。

3

這是使用machine.config的巨大好處之一。在我上一份工作中,我們有開發,測試和生產環境。我們可以將machine.config用於連接字符串(適當的,dev/test/prod SQL機器)。

如果您無法訪問實際的生產機器(例如,如果您在共享主機上使用託管公司),這可能不是您的解決方案。

4

在我們有4個環境(開發,測試,分期和生產)的一個項目中,我們開發了一個系統,其中應用程序根據部署的計算機名稱選擇適當的配置。

這個工作對我們,因爲:

  • 管理員可以在不涉及開發商(的要求),而無需與配置文件(他們討厭)擺弄部署應用程序;
  • 機器名稱遵守慣例。我們使用正則表達式匹配名稱並將其部署到環境中的多臺機器上;和
  • 我們使用集成安全性來連接字符串。這意味着我們可以在設計時將帳戶名稱保存在我們的配置文件中,而不會泄露任何密碼。

在這種情況下它對我們很有效,但可能無處不在。

71

web.config中的<appSettings>標籤支持一個文件屬性,該屬性將使用它自己的一組鍵/值來加載外部配置。這些將覆蓋您在web.config中的任何設置或添加到它們。

我們通過在安裝時修改我們的web.config,並使用與要安裝網站的環境相匹配的文件屬性來利用此優勢。我們通過安裝程序上的開關完成此操作。

例如;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config"> 

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config"> 

<appSettings file=".\EnvironmentSpecificConfigurations\production.config"> 

注:

  • 更改到的.config由屬性指定不會觸發asp.net工作進程