asp.net core內,launchSettings.json提供給開發工具一些引數化,提供開發除錯,appsettings.json(appsettings.Development.json)做發行/開發除錯時配置引數化
launchSettings.jsonProperties 資料夾中找到此檔案
1、Visual Studio 或使用.NET Core CLI 執行此 ASP.NET Core 專案時,將使用此檔案中的設定。2、僅用於本地開發環境。3、預設專案的profiles節點下包括 IIS Express 和 專案同名的節點,前者是Visual Studio的IIS Express除錯引數,後者是命令列啟動.net core專案的配置引數可通過配置 profiles/節點/environmentVariables/ASPNETCORE_ENVIRONMENT 實現配置環境變數,通過呼叫IHostingEnvironment.IsEnvironment實現動態區分環境。
IHostingEnvironment.EnvironmentName會預設讀取 ASPNETCORE_ENVIRONMENT 環境變數Startup類的Configure方法預設實現
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); }
IHostingEnvironment.IsDevelopment是擴充套件方法,實際上是
public static bool IsDevelopment(this IHostingEnvironment hostingEnvironment) { if (hostingEnvironment == null) { throw new ArgumentNullException("hostingEnvironment"); } return hostingEnvironment.IsEnvironment(EnvironmentName.Development); }
IHostingEnvironment.IsEnvironment實際上是擴充套件方法,具體實現如下
public static bool IsEnvironment(this IHostingEnvironment hostingEnvironment, string environmentName) { if (hostingEnvironment == null) { throw new ArgumentNullException("hostingEnvironment"); } return string.Equals(hostingEnvironment.EnvironmentName, environmentName, 5); }
最後,實際上區分執行環境是IHostingEnvironment.EnvironmentName載入ASPNETCORE_ENVIRONMENT 環境變數
擴充套件自定義開發環境複製launchSettings.json檔案的profiles結構,修改一段自定義啟動配置
"Debug_Project": { "commandName": "Project", "launchBrowser": true, "launchUrl": "api/values", "applicationUrl": "http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Debug" } }
Visual Studio 下果然出現了Debug_Project除錯啟動項
在Startup類的 新增一段測試程式碼
if (env.IsEnvironment("Debug")) { var before = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); Console.WriteLine($"{before}"); }
如願打印出了Debug,說明程式啟動除錯時,環境變數ASPNETCORE_ENVIRONMENT的值,如願變成了"Debug"
appsettings.json(appsettings.Development.json)1、藉助於launchSettings.json,可以在開發除錯環境,區分執行環境,比如載入通過引數,載入不同的 appsettings.json 檔案,比如開發預設的環境變數值 Development 載入配置檔案 appsettings.Development.json,反之則載入 appsettings.json。2、由於區分IHostingEnvironment.EnvironmentName實際上是指向約定的環境變數 ASPNETCORE_ENVIRONMENT ,可以在釋出k8s/docker時,配置環境變數ASPNETCORE_ENVIRONMENT,區分執行環境,做不同的選項載入。
後記綜上所述,appsettings.json(appsettings.Development.json)的載入,實際上是IHostingEnvironment.EnvironmentName實際上是指向約定的環境變數 ASPNETCORE_ENVIRONMENT,讀出環境環境,是否為Development,成立,則載入配置檔案 appsettings.Development.json,反之則載入配置檔案 appsettings.json
深挖了一下Startup配置檔案載入過程,發現了很多之前遺漏的知識,這也就是這個分享系列的主旨,查漏補缺,一邊寫,一邊查閱資料,梳理如果對於內容有交流和學習的
原文地址:/file/2020/08/25/20200825040057_2.jpg.html