分享如何讓 .NET Core 應用程式讀出 appsetting.development.json 的值
有開發過 ASP.NET Core 的朋友一定對 appsetting.json 的使用不陌生,預先支援多個環境的設定可以更方便我們在不同環境中切換
典型的設定提供者順序是:
- 檔案 (appsettings.json、appsettings.{Environment}.json,其中
{Environment}
是應用程式的目前裝載環境,變數值為ASPNETCORE_ENVIRONMENT
) - Azure Key Vault
- 使用者祕密 (祕密管理員) (僅限開發環境)
- 環境變數
- 命令列引數
這邊則是要分享如何使用檔案的方式讓 .NET Core 的 Console Application 透過環境變數可以載入不同環境的 configuration setting.
開發上需要載入 Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions 與 Microsoft.Extensions.Configuration.Json
1 | public class AppSettingsHelper |
以上即可使用 singleton 的物件將設定值透過GetValueFromKey
與指定的key
取回.
這邊在專案上如果需要同時載入 appsettings.{Environment}.json 檔案時,需要先將本機配置環境變數,使其設定可以成取得
如希望開發時能成功載入 appsettings.development.json 檔案去複寫當前的appsettings.json設定,則需有幾種方式:
啟動應用程式時透過參數額外帶入,如:
Windows
C:\> set ASPNETCORE_ENVIRONMENT=Development C:\> dotnet ...
Unix/macOS
$ export ASPNETCORE_ENVIRONMENT=Development $ dotnet ...
launch profile
帶入,如:launchSettings.json
1
2
3
4
5
6
7
8
9
10
11
12{
"profiles": {
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:54340/"
},
}
}然後指行指令時透過
--launch-profile
帶入參數dotnet run --launch-profile EnvironmentsSample
IDE 設定,這邊以 Rider 為例:
這邊要特別注意 Rider 內的測試專案是另外一個設定,需要透過以下方式額外設定 Test Runner
的環境變數: