来自 launchsettings.json 的环境变量正在测试中使用吗?

Rui*_*mba 5 c# .net-core azure-devops

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

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

构建是非常基础的——它包含一个dotnet restore,dotnet builddotnet test任务:

构建定义

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

构建变量

这些构建在包含多个构建代理(私有,非托管)的 VM 上运行。

现在是奇怪的部分 -有时构建会选择错误的设置!.

经过一些调查并添加更多日志记录后,我们意识到ASPNETCORE_ENVIRONMENTvalue 有时是Development-Selfhost,而不是QA。该值似乎来自launchsettings.json测试项目引用的项目文件:

{
  "profiles": {
    "MyProject.PublicApi": {
      "commandName": "Project",
      "launchBrowser": false,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development-Selfhost"
      },
      "applicationUrl": "http://localhost:5028/"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET核心使用多个环境launchSettings.json当一个应用程序与启动时使用的文件dotnet run

launchSettings.json如果可用,则读取。覆盖环境变量中的environmentVariables设置launchSettings.json

添加launchSettings.jsonto.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/"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

行为基本相同——有时使用管道中设置的值,有时使用管道中设置的值launchSettings.json会失败,因为没有对应的配置文件:

System.IO.FileNotFoundException :未找到配置文件“appsettings.Rui.base.json”,该文件不是可选的。

ssp*_*iel 0

看起来您有一个测试,也许不止一个,正在启动并运行一个应用程序。这将导致在 dotnet 测试任务期间读取启动设置并设置环境变量。这可以解释:

  1. 你的环境变量是如何被覆盖的
  2. 下面的异常是如何抛出的

System.IO.FileNotFoundException:找不到配置文件“appsettings.Rui.base.json”并且不是可选的。