【发布时间】:2019-12-10 11:49:23
【问题描述】:
我有一个 .NET Core 构建管道,用于在 Azure DevOps 上运行一些测试。每个环境的设置都存储在配置文件中,例如:
appsettings.jsonappsettings.qa.jsonappsettings.test.json
构建非常基础 - 它包含 dotnet restore、dotnet build 和 dotnet test 任务:
ASPNETCORE_ENVIRONMENT 环境变量在构建管道的 Variables 部分中设置:
这些构建在包含多个构建代理(私有,非托管)的 VM 上运行。
现在奇怪的部分 - 有时构建会选择错误的设置!。
经过一些调查并添加更多日志记录后,我们意识到ASPNETCORE_ENVIRONMENT 的值有时是Development-Selfhost,而不是QA。该值似乎来自测试项目引用的项目的launchsettings.json 文件:
{
"profiles": {
"MyProject.PublicApi": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development-Selfhost"
},
"applicationUrl": "http://localhost:5028/"
}
}
}
根据Use multiple environments in ASP.NET Core,使用dotnet run启动应用时使用launchSettings.json文件:
launchSettings.json被读取(如果可用)。launchSettings.json中的environmentVariables设置会覆盖环境变量。
将launchSettings.json 添加到.gitignore 解决了我的问题,但我试图了解如果我不在构建管道中执行dotnet run 命令,它为什么会使用这些设置。另外,为什么这种行为如此随机?有时它使用正确的设置,有时却没有。
更新 1(2019 年 13 月 12 日):
我检查了日志,可以确认文件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' 未找到并且不是可选的。
【问题讨论】:
-
由于您的构建是自托管的,是否可以同时运行其他构建覆盖该环境变量?
-
@Crowcoder 是的,这是我想到的第一件事,即
ASPNETCORE_ENVIRONMENT在构建运行时在某处被修改。问题是我设置了一个任务以在构建的开始和结束时显示该变量值,但值是相同的,在本例中为QA -
另外,值
Development-Selfhost未在任何管道中设置,仅在源代码中 - 在此特定构建中,launchsettings.json -
您能告诉我们您是从哪里看到 ASPNETCORE_ENVIRONMENT 的值,是从 Artifact 的文件中还是从构建管道的日志中看到的?
-
在这种情况下,我会在github.com/aspnet/AspNetCore 向 ASP.NET Core 团队提交错误报告,因为这可能不是故意的。
标签: c# .net-core azure-devops