ASP.NET Core引進了在多種環境中對控制應用程式行為的進一步支援,例如開發環境(Development Environment)、預釋出環境(Staging Environment),和生産環境(Production Environment)。環境變量(ASPNETCORE_ENVIRONMENT)被用來訓示程式在哪個環境中運作,允許程式被正确的配置。
一、運作環境
開發環境(Development):當開發程式時使用。
預釋出環境(Staging):按照慣例,Staging環境是預生産環境,用于釋出到産品環境前的最終測試。
産品環境(Production):是正在運作并被終端使用者使用的環境。這個環境應該配置成最大程度的安全、高效和魯棒性。
二、環境變量(ASPNETCORE_ENVIRONMENT)
ASP.NET Core使用一個特殊的環境變量——ASPNETCORE_ENVIRONMEN來描述應用程式目前運作的環境。這個變量可以設定成你任何喜歡的值,但約定俗成使用這三個值:Development、Staging和Production。你将在ASP.NET Core提供的樣例和模版中找到這些值。
在Windows和macOS中,環境變量名是大小寫不敏感的。不管你是把它設定成Development,或者是development,或者是DEVELOPMENT,結果都一樣。然而在預設情況下,Linux是大小寫敏感的。出于最佳實踐的考慮,環境變量、檔案名和設定(Setting)應該假定為大小寫敏感。
三、設定環境變量
關于在不同環境時,如何設定環境變量,可參考微軟的官方文檔:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments#setting-the-environment
在開發時,我們可以在Visual Studio的設定頁中直接修改環境變量(如下圖所示),不需要修改系統中的設定。
這個屬性頁中的設定會被持久化存儲到launchSettings.json這個檔案中。這個檔案位于項目的Properties檔案夾下面。
四、根據不同的環境加載不同的Startup類
在上篇中提到程式的主方法中使用到UseStartup<TStartup>()這個方法。這個方法有多個重載,除了可以加載指定的Startup類外,還可以在指定的程式集中根據目前程式運作環境搜尋特定的Startup類。搜尋規則為尋找名字為"Startup{EnvironmentName}"。例如,目前程式在開發環境中運作時,這個方法就會在你指定的程式集中查找名為"StartupDevelopment"的類。
ASP.NET Core還支援這樣的情況:當你在使用UseStartup<TStartup>()指定了一個固定的Startup類後,它還可以根據目前程式運作環境,加載Startup類中以這種格式 "Configure{EnvironmentName}"命名的方法。舉個例子,如果程式目前的執行環境是Staging環境,就會調用在Startup類中的ConfigureStaging方法,而不再調用Configure方法。
五、總結
Startup的使用比較靈活,可以把開發、測試、生産獨立的環境獨立開來,可以在實際中運用起來。
六、參考
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments