测试中使用了launchsettings.json中的环境变量? - c#

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

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

构建是非常基本的-它包含一个dotnet restoredotnet builddotnet test任务:
测试中使用了launchsettings.json中的环境变量? - c#
ASPNETCORE_ENVIRONMENT环境变量在构建管道的“变量”部分中设置:
测试中使用了launchsettings.json中的环境变量? - c#
这些构建在包含多个构建代理(私有,非托管)的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”,它不是可选的。

参考方案

看起来您已经启动或运行了一个应用程序,可能已经进行了一项以上的测试。这将导致在dotnet测试任务期间读取启动设置并设置环境变量。那可以解释:

环境变量如何被覆盖
如何引发以下异常

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

.NET C#Webbrowser填充输入,不带ID或类名 - javascript

我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…