launchsettings.json中的环境变量是否正在测试中?

问题描述 投票:3回答:1

我有一个.NET Core构建管道,该管道用于在Azure DevOps上运行一些测试。每个环境的设置都存储在配置文件中,例如:

  • appsettings.json
  • appsettings.qa.json
  • appsettings.test.json

构建非常基础-包含dotnet restoredotnet builddotnet test任务:

Build definition

ASPNETCORE_ENVIRONMENT环境变量在构建管道的Variables部分中设置:

Build 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,使用launchSettings.json启动应用程序时使用dotnet run文件:

launchSettings.json被读取(如果可用)。 environmentVariables中的launchSettings.json设置会覆盖环境变量。

launchSettings.json添加到.gitignore解决了我的问题,但是,我试图理解为什么如果我不在构建管道中执行dotnet run命令,它为何使用这些设置。另外,为什么这种行为如此随机?有时它使用正确的设置,有时却没有。

更新1(13/12/2019):

我已经检查了日志,并且可以确认文件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',它不是可选的。

c# .net-core azure-devops
1个回答
0
投票

代替使用单独的appsettings。[environment] .json文件,您可以使用一个appsettings.json文件并使用Azure DevOps中的file transform task对其进行转换。该任务将用管道变量中的值替换所有匹配的值。这具有从纯文本代码中删除您的环境设置的附加好处,并使它们由构建/发布管道拥有。但是,此方法的主要缺点是对设置的任何更改都需要更新所有管道。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.