ASP.NET Core 多重環境組態管理

透過環境變數的設定來決定我們用哪一個檔案來複寫appsetting.json

進而控制那些參數在哪個環境使用

本文章參考文件1

本文章參考文件2

 

1.組態設定

 

專案初始化的時候只會有appsettings.json、appsettings.Development.json

在本機執行專案(Development)的時候,會先讀取 appsettings.json 再讀取 appsettings.Development.json 。

並合併兩檔的組態。若組態項目重複,則以後來者覆蓋先前設定,亦即以 appsettings.Development.json 為準。

新增appsettings.Production.json、appsettings.Staging.json

在appsettings.Production.json 裡面放正式機的資料庫連線字串

在appsettings.Staging.json 內放測試機的資料庫連線字串

 

2.取得並修改環境變數

要取得環境變數ASPNETCORE_ENVIRONMENT,可以透過在Startup.cs的 Configure 注入

IHostingEnvironment  env,透過 env.EnvironmentName 即可取得環境變數

但是在透過Visual Studio 組態設定為Release 發佈的檔案,這個 env.EnvironmentName 會固

定為:Production,無法正確取得執行環境設定的系統環境變數,因此我們多一段Code來複寫

env.EnvironmentName

3.載入組態方式設定(Program.cs)

讀取組態設定檔時,會先讀取 appsettings.json 並設定 optional=false,指定該檔為必要檔案

再讀取 appsettings.{env.EnvironmentName}.json 檔案。 組態檔載入的特性是當遇到 Key 值重複時,後面載入的設定會蓋掉前面的設定。

因此在測試環境的時候,就會將appsettings.Staging.json 相同Key值得設定複寫appsettings.json

在正式環境的時候,就會將appsettings.Production.json 相同Key值得設定複寫appsettings.json

4.環境變數設定

 

在測試機的環境,設定系統環境變數ASPNETCORE_ENVIRONMENT 為 Staging

在正式環境,設定系統環境變數ASPNETCORE_ENVIRONMENT 為 Production

下圖為測試機的做法

5. 發佈檔案

透過Visual Studio 發佈檔案的時候,會發現所有的appsetting.json都會發行出來

我們的做法,是透過環境變數的設定來決定我們用哪一個檔案來複寫appsetting.json

以上,程式在發行的時候,就可以直接在測試環境/正式環境執行