透過環境變數的設定來決定我們用哪一個檔案來複寫appsetting.json
進而控制那些參數在哪個環境使用
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
以上,程式在發行的時候,就可以直接在測試環境/正式環境執行