2012-01-05 42 views
1

允許ASP.NET應用程序知道它運行在哪個環境的建議方式是什麼?我的應用程序可以在這些環境中運行:如何配置ASP.NET應用程序的環境?

  • 內的Visual Studio調試
  • 一個自動化系統測試
  • 部署一個臨時服務器上
  • 部署在生產服務器上

在每這些環境應用程序需要一些不同的配置。環境之間的主要區別是使用哪個數據庫連接設置,但也有其他差異。

這是我曾嘗試:

  • 我一直在使用Visual Studio中的「配置」選項嘗試。默認情況下有兩個:發佈和調試。我試圖用我的四種環境中的標識替換這兩個。然後可以使用這些配置將轉換應用於Web.config文件。這裏的問題是選擇配置發生在構建時間,我想編譯我的應用程序,然後在運行在Web服務器上之前選擇環境。在Visual Studio內部進行調試時,Web.config轉換也不會發生,所以不會告訴應用程序它在調試環境中運行,它不會得到任何環境。我在Use Visual Studio web.config transform for debugging找到了一個解決方法,但它似乎不能很好地工作。我必須更改項目屬性中的配置,這是一個緩慢的過程。
  • 我試過使用環境變量。這樣,我可以從應用程序外部設置變量MYAPP_ENV = dev,並且我可以在C#中將其讀取爲
    string env = System.Environment.GetEnvironmentVariable(「MYAPP_ENV」);
    但是我不知道如何從Visual Studio和IIS內部設置這個環境變量。我無法在機器上進行全局設置,因爲同一臺機器需要能夠在多個環境中運行應用程序。

那麼,在ASP.NET中如何推薦這樣做呢?在Ruby on Rails中,我將使用RAILS_ENV環境變量,並且在PHP中,我將包含一個文件,該文件未檢入存儲庫並添加到版本控制系統的忽略列表中。

+0

,如果你這樣做,但我會嘗試使用,以避免目前尚不清楚,訪問這些值編寫特定於環境的代碼(例如'if env ==「dev」{else else {}',因爲這樣你的網站在不同的環境中的行爲就會有所不同,任何需要改變的值都應該在配置文件中進行修改(參見AaronS答案) – Jeff 2012-01-05 15:15:51

回答

3

我會爲每個環境分開web.config文件。

或者,您也可以通過添加外部配置文件來設置類似於您對PHP包含文件所做的操作。

只需將以下內容添加到您的web.config。

<appSettings file="MySettings.config"> 

然後添加一個名爲MySettings.config的新文件,其中包含您的其他配置信息。

+0

+1。爲了幫助維護獨立的web.configs,我建議您利用[config transforms](http:/ /msdn.microsoft.com/en-us/library/dd465318.aspx)。 – Keith 2012-01-05 15:15:32

+0

AronS:這聽起來很有趣。在開始調試(F5)時,如何在運行我的應用程序之前將Visual Studio設置爲自動將一個值放入MySettings.config文件中?當我將它部署到生產環境中的IIS時,這個MySettings.config文件是否可以在我的應用程序的dll旁使用? Keith:正如我最初寫的那樣,它看起來像變換隻能作爲構建過程的一部分,還有其他併發症似乎使它無法有效工作。 – 2012-01-06 13:18:24

+0

你會做什麼類似於你如何設置你的PHP版本。只需在每個環境中都有此文件,並讓您的部署工具忽略它。 我實際上做的是在子文件夾中有多個版本的web.config,爲每個環境重命名(web.config.QA,web.config.Prod等)。然後,我的構建和部署過程根據正在執行的構建選擇正確的構建和部署過程,將其重命名爲web.config,然後在部署站點時替換根中的構件。這對我來說真的很好。 – AaronS 2012-01-06 15:12:11

1

web.config文件用於環境配置。如果您在視覺工作室中發現配置過於繁瑣,則可以將該文件放在版本控制之外,然後針對每個環境進行編輯。在<的appSettings >節點可以添加鍵:

<appSettings> 
    <add key="Environment" value="DEV" /> 
</appSettings> 

然後你就可以通過ConfigurationManager中類

var currentEnvironment = ConfigurationManager.AppSettings["Environment"].ToString(); 
+0

把整個web.config放在版本控制之外或者每個環境只有一個版本是沒​​有什麼意義的,因爲有很多東西需要放在文件中,但不是真正的環境或配置相關。 – 2012-01-06 13:23:56