簡體   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