![](/img/trans.png)
[英]How to reference environment variables in launchsettings.json on linux
[英]Environment variables from launchsettings.json are being used in tests?
我有一個 .NET Core 構建管道,用於在 Azure DevOps 上運行一些測試。 每個環境的設置都存儲在配置文件中,例如:
appsettings.json
appsettings.qa.json
appsettings.test.json
構建是非常基礎的——它包含一個dotnet restore
、 dotnet build
和dotnet test
任務:
ASPNETCORE_ENVIRONMENT
環境變量在構建管道的變量部分設置:
這些構建在包含多個構建代理(私有,非托管)的 VM 上運行。
現在是奇怪的部分 -有時構建會選擇錯誤的設置! .
經過一些調查並添加更多日志記錄后,我們意識到ASPNETCORE_ENVIRONMENT
值有時是Development-Selfhost
,而不是QA
。 該值似乎來自測試項目引用的項目的launchsettings.json
文件:
{
"profiles": {
"MyProject.PublicApi": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development-Selfhost"
},
"applicationUrl": "http://localhost:5028/"
}
}
}
根據在 ASP.NET Core 中使用多個環境,使用dotnet run
啟動應用程序時使用launchSettings.json
文件:
如果可用,則讀取
launchSettings.json
。launchSettings.json
environmentVariables
設置會覆蓋環境變量。
將launchSettings.json
添加到.gitignore
解決了我的問題,但我試圖理解如果我不在我的構建管道中執行dotnet run
命令,它為什么使用這些設置。 另外,為什么這種行為如此隨意? 有時它使用正確的設置,有時它沒有。
我檢查了日志,可以確認文件launchSettings.json
已復制到測試項目的bin
文件夾中。
我嘗試為ASPNETCORE_ENVIRONMENT
設置一個不同的值,該值未在其他任何地方設置:
{
"profiles": {
"MyProject.PublicApi": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Rui"
},
"applicationUrl": "http://localhost:5028/"
}
}
}
行為基本相同 - 有時它使用管道中設置的值,有時它會使用launchSettings.json
設置的值並且會失敗,因為沒有對應的配置文件:
System.IO.FileNotFoundException :未找到配置文件“appsettings.Rui.base.json”,該文件不是可選的。
我也遇到了類似的問題,但在我的情況下,“launchSettings.json”中的環境變量總是覆蓋其他配置。
我通過在 launchSettings.json 中設置多個配置文件來解決它
{
"profiles": {
"grpc-server": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://0.0.0.0:5001"
},
"staging-profile": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://0.0.0.0:5000"
},
"live-profile": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "http://0.0.0.0:80"
}
}
}
並傳遞配置文件名稱
dotnet run --launch-profile {profile-name}
看起來您有一個測試,可能不止一個,正在啟動和運行應用程序。 這將導致在 dotnet 測試任務期間讀取啟動設置並設置環境變量。 那將解釋:
System.IO.FileNotFoundException :未找到配置文件“appsettings.Rui.base.json”,該文件不是可選的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.