前言
假日上課時前同事詢問在 .NET 中要如何設定執行環境,在 ASP.NET Core 中可以自行定義環境變數值 ASPNETCORE_ENVIRONMENT ,如果沒有特別設定該值則預設會是 Production,這一篇就分享在 .NET Core 中如何使用環境變數以及設定方式,若有問題或是錯誤的地方歡迎各位高手給予指導。
ENVIRONMENT
首先,如果有開發 .NET Core 開發者相信大家一定看過下面這段代碼,在 .NET Core 新增 Web Application 後開啟 startup.cs 內的 Configure 可以看到下列代碼
如果需要在本機環境模擬不同的環境,在 .NET Core 中可以透過設定 properties\launchSettings.json 檔案定義目前應用程式運行的環境,在.NET 應用程式執行啟動時會先讀取 launchSettings.json ,檔案中的 environmentVariables 會覆寫系統環境的設定值。
其中在專案按下 F5 執行應用程式時,可以設定執行方式是 IIS Express 或是 Project 執行,其中就可以設定 ASPNETCORE_ENVIRONMENT 變數,其各自可以定義不同的環境變數值,舉例來說我們開啟 launchSettings.json 檔案,就可以看到 commandName 屬性對應到上圖的下拉選單值 IIS Express 與 ProjectName ,IIS Express 環境變數為 Staging,如果用 Project 啟動的話環境變數則是 Development
設定方式
以下說明修改專案的 launchSetting.json 與設定系統變數 ASPNETCORE_ENVIRONMENT 的設定方式
Visual Studo IDE 設定 launchSettings.json
在 Visual Studio 則可以提供 GUI 介面可以進行環境變數值設定,設定方式為在專案按右鍵 > property > debug,看到中間區塊可以修改變數值得內容
Windows 設定系統變數
Step 1 : 開啟控制台 > 系統及安全性 > 系統
Step 2 : 進階系統設定 > 進階 > 環境變數
Step 3 : 新增系統變數 > 變數名稱 ASPNETCORE_ENVIRONMENT,變數值 Development
設定完成,大功告成
使用 powershell 設定系統變數
語法如下
Web.Config
透過 Web.Config 設定
macOS 與 Linux
.NET Core 跨平台是眾所皆知的,因此在非 Windows 下當然也可以設定環境變數值,但由於手邊沒有 macOS (家裡窮) 以及 Linux 環境,因此如果有設定上的需求可以參考 MSDN 說明,傳送門
感想
在設定環境變數來說,整體上操作與設定都不難,算是蠻容易上手的,另外在 Configure 和 ConfigureServices 也支援 Configure<EnvironmentName> 和 Configure<EnvironmentName>Services 也支援指定環境方法來做特定版本的設定方式,這方式是看了 MSDN 官方說明才知道有這方式,如果有需要要也可以參考看看,Happy Coding :)
參考
在 ASP.NET Core 中使用多個環境
假日上課時前同事詢問在 .NET 中要如何設定執行環境,在 ASP.NET Core 中可以自行定義環境變數值 ASPNETCORE_ENVIRONMENT ,如果沒有特別設定該值則預設會是 Production,這一篇就分享在 .NET Core 中如何使用環境變數以及設定方式,若有問題或是錯誤的地方歡迎各位高手給予指導。
ENVIRONMENT
首先,如果有開發 .NET Core 開發者相信大家一定看過下面這段代碼,在 .NET Core 新增 Web Application 後開啟 startup.cs 內的 Configure 可以看到下列代碼
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
// to do something
}
分享一下自己對於這段 Code 的理解,Configure 方法注入 IHostingEnvironment 至啟動邏輯中,接著使用 env.IsDevelopment 方法判斷目前環境是否為開發環境,如果是的話就會進入到 UseDeveloperExceptionPage 也就是開發環境的錯誤訊息頁面,在追根究柢往下看 env.IsDevelopment 做了什麼事,按下 F12 去查看代碼背後是使用 IHostingEnvironment 的 IsEnvironment 方法,代碼如下
環境設定 /// <summary>
/// Checks if the current hosting environment name is <see cref="F:Microsoft.AspNetCore.Hosting.EnvironmentName.Development" />.
/// </summary>
/// <param name="hostingEnvironment">An instance of <see cref="T:Microsoft.AspNetCore.Hosting.IHostingEnvironment" />.</param>
/// <returns>True if the environment name is <see cref="F:Microsoft.AspNetCore.Hosting.EnvironmentName.Development" />, otherwise false.</returns>
public static bool IsDevelopment(this IHostingEnvironment hostingEnvironment)
{
if (hostingEnvironment == null)
throw new ArgumentNullException(nameof (hostingEnvironment));
return hostingEnvironment.IsEnvironment(EnvironmentName.Development);
}
IsEnvironment 方法是去取得目前的環境變數 hostingEnvironment.EnvironmentName 看是不是 development,其中 EnvironmentName 就是今天的重點,在 .NET Core 中可以透過設定 ASPNETCORE_ENVIRONMENT 定義目前應用程式運行的環境,預設內建 Development、Staging 以及 Production 三種值,環境變數是應用程式用來取得當前正在運行的環境,並依照環境變數值做適當的配置,舉例來說如果是 Production 環境的話就啟用 cache、關閉錯誤訊息畫面確保資訊不外洩、產生相對應的 Log 與監控...等行為,以上行為在 Development 與 Staging 都不啟用,都可以依據需求來自行定義執行邏輯。如果需要在本機環境模擬不同的環境,在 .NET Core 中可以透過設定 properties\launchSettings.json 檔案定義目前應用程式運行的環境,在.NET 應用程式執行啟動時會先讀取 launchSettings.json ,檔案中的 environmentVariables 會覆寫系統環境的設定值。
其中在專案按下 F5 執行應用程式時,可以設定執行方式是 IIS Express 或是 Project 執行,其中就可以設定 ASPNETCORE_ENVIRONMENT 變數,其各自可以定義不同的環境變數值,舉例來說我們開啟 launchSettings.json 檔案,就可以看到 commandName 屬性對應到上圖的下拉選單值 IIS Express 與 ProjectName ,IIS Express 環境變數為 Staging,如果用 Project 啟動的話環境變數則是 Development
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5627",
"sslPort": 44308
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
},
"EFCoreApplication": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}
設定方式
以下說明修改專案的 launchSetting.json 與設定系統變數 ASPNETCORE_ENVIRONMENT 的設定方式
Visual Studo IDE 設定 launchSettings.json
在 Visual Studio 則可以提供 GUI 介面可以進行環境變數值設定,設定方式為在專案按右鍵 > property > debug,看到中間區塊可以修改變數值得內容
Windows 設定系統變數
Step 1 : 開啟控制台 > 系統及安全性 > 系統
Step 2 : 進階系統設定 > 進階 > 環境變數
Step 3 : 新增系統變數 > 變數名稱 ASPNETCORE_ENVIRONMENT,變數值 Development
使用 powershell 設定系統變數
語法如下
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Web.Config
透過 Web.Config 設定
<PropertyGroup> <EnvironmentName>Development</EnvironmentName> </PropertyGroup>
macOS 與 Linux
.NET Core 跨平台是眾所皆知的,因此在非 Windows 下當然也可以設定環境變數值,但由於手邊沒有 macOS (家裡窮) 以及 Linux 環境,因此如果有設定上的需求可以參考 MSDN 說明,傳送門
在設定環境變數來說,整體上操作與設定都不難,算是蠻容易上手的,另外在 Configure 和 ConfigureServices 也支援 Configure<EnvironmentName> 和 Configure<EnvironmentName>Services 也支援指定環境方法來做特定版本的設定方式,這方式是看了 MSDN 官方說明才知道有這方式,如果有需要要也可以參考看看,Happy Coding :)
參考
在 ASP.NET Core 中使用多個環境






