NetCore中的環境變數的值取自於哪裡
阿新 • • 發佈:2021-08-28
NetCore中的環境變數的值取自於哪裡?
環境
- 作業系統 win10
- IIS 10
- net core 2.2 ,net core 3.0
分別生成了三個環境變數的配置檔案:
以及測試程式碼:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Run(async (context) =>
{
context.Response.ContentType = "text/plain; charset=utf-8";
await context.Response.WriteAsync($"程序內環境變數:env.EnvironmentName={env.EnvironmentName}\n");
var myEnvironmentValue = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", EnvironmentVariableTarget.Machine);
await context.Response.WriteAsync($"作業系統環境變數 ASPNETCORE_ENVIRONMENT={myEnvironmentValue ?? "沒有找到"}\n");
var connectionString = Configuration["ConnectionStrings:RicoDbContext"];
await context.Response.WriteAsync($"資料庫庫連線字串:{connectionString}\n");
var appId = Configuration["AppId"];
await context.Response.WriteAsync($"appId={appId ?? "沒找到"}\n");
});
}
dotnet命令和環境變數
dotnet run
首先來使用dotnet run
命令執行一下,命令執行在如下目錄:
>dotnet run
Hosting environment: Development
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.
為啥環境是Development
launchSettings
第一個值,如果將Staging
放第一個就不一樣了。
可以看到結果,環境變數變更了:
>dotnet run
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.
dotnet run --launch-profile
也可以使用dotnet run --launch-profile <name>
自定義啟動配置檔案:
>dotnet run --launch-profile Production
Hosting environment: Production
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.
瀏覽器開啟http://localhost:5001
,可以看到效果:
env.EnvironmentName
的值是Production
剛才自定義的環境,作業系統的全域性環境變數ASPNETCORE_ENVIRONMENT
值是Production
也是對的,因為我設定的就是這個:
切換一下當前視窗的啟動配置檔案:
>dotnet run --launch-profile Staging
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.
可以看到讀取的配置檔案只受當前視窗的啟動配置檔案影響,即launchSettings
檔案。不受全域性環境變數影響。
設定當前會話環境變數
在官方文件在 ASP.NET Core 中使用多個環境介紹中,可以在當前會話視窗的設定環境變數,使用以下命令:
set ASPNETCORE_ENVIRONMENT=Development
操作結果如下:
>set ASPNETCORE_ENVIRONMENT=Development
>dotnet run
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.
當前視窗的全域性環境變數似乎沒有起作用!!
部署在IIS上
我將以上的專案釋出成IIS部署包,結果如下:
可以看到使用的環境變數是Development
而不是預設的Production
,全域性環境變數是Production
也沒起什麼作用?
釋出配置檔案與環境變數
官方說可以使用以下配置IIS的環境變數:
對於net core 2.2
版本來說一直報錯HTTP Error 502.5 - Process Failure
(詳見HTTP Error 500.30 - ANCM In-Process Start Failure)
疑問
- 可以確定
dotnet run
命令環境變數載入的是啟動配置檔案。 - iis 的部署環境環境變數加載於哪裡?
- 全域性環境變數,web.config環境量,啟動配置檔案
launchSettings
這三個取值優先順序是怎樣的?