繁体   English   中英

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

[英]Environment variables from launchsettings.json are being used in tests?

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

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

构建是非常基础的——它包含一个dotnet restoredotnet builddotnet 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命令,它为什么使用这些设置。 另外,为什么这种行为如此随意? 有时它使用正确的设置,有时它没有。

更新 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”,该文件不是可选的。

我也遇到了类似的问题,但在我的情况下,“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 测试任务期间读取启动设置并设置环境变量。 那将解释:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM