.NET Core load appsettings.development.json


分享如何讓 .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.AbstractionsMicrosoft.Extensions.Configuration.Json

public class AppSettingsHelper
{
    private IConfigurationRoot _configuration;

    private readonly IConfigurationBuilder _builder;

    private static readonly Lazy<AppSettingsHelper> Lazy =
        new Lazy<AppSettingsHelper>(() => new AppSettingsHelper());

    public static AppSettingsHelper Instance
    {
        get { return Lazy.Value; }
    }

    AppSettingsHelper()
    {
        var basePath = Directory.GetCurrentDirectory();
        _builder = new ConfigurationBuilder()
            .SetFileProvider(new PhysicalFileProvider(basePath))
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
                optional: true);

        _configuration = _builder.Build();
    }

    public string GetValueFromKey(string key)
    {
        return _configuration.GetSection(key).Value;
    }
}

以上即可使用 singleton 的物件將設定值透過GetValueFromKey與指定的key取回.

這邊在專案上如果需要同時載入 appsettings.{Environment}.json 檔案時,需要先將本機配置環境變數,使其設定可以成取得

如希望開發時能成功載入 appsettings.development.json 檔案去複寫當前的appsettings.json設定,則需有幾種方式:

  1. 啟動應用程式時透過參數額外帶入,如:

    • Windows

      C:\> set ASPNETCORE_ENVIRONMENT=Development
      C:\> dotnet ...
    • Unix/macOS

      $ export ASPNETCORE_ENVIRONMENT=Development
      $ dotnet ...
  2. launch profile 帶入,如:

    launchSettings.json

    { 
      "profiles": {    
        "EnvironmentsSample": {
          "commandName": "Project",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Staging"
          },
          "applicationUrl": "http://localhost:54340/"
        },   
      }
    }

    然後指行指令時透過--launch-profile帶入參數

    dotnet run --launch-profile EnvironmentsSample
  3. IDE 設定,這邊以 Rider 為例:

    01.png

這邊要特別注意 Rider 內的測試專案是另外一個設定,需要透過以下方式額外設定 Test Runner 的環境變數:

02.png

References


作者: Blackie
版權聲明: 本站所有文章除特別聲明外,均採用 CC BY 4.0 許可協議。轉載請註明來源 Blackie !
  目錄