环境变量没有像我希望的那样改变

时间:2018-02-15 14:42:23

标签: c# asp.net-core

我使用PowerShell将值“Test”设置为ASPNETCORE_ENVIRONMENT,但是当我启动应用程序时,它从launchSettings.json获取值。

[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Test", "Machine")

如果我从launchSettings.json中删除该值,则该值将更改为“Production”,而不是“Test”。

我做错了什么?

我会将它部署到AWS Beanstalk上的两个不同的应用程序,我将发送一个脚本文件来更改环境变量。

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();

我的launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:60511/",
      "sslPort": 44392
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "myapp",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MonitoraApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "myapp",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:60512"
    }
  }
}

2 个答案:

答案 0 :(得分:3)

根据docs,这是预期的行为:

  

可以在项目的Properties\launchSettings.json文件中设置本地计算机开发的环境。在launchSettings.json中设置的环境值将覆盖在系统环境中设置的值。

所以问题的答案(“我做错了什么?”)如下: 你不应该在生产中使用launchsettings.json(所以只需删除它并忽略源代码控制或修改部署脚本,这样它就不会复制这个文件)。 launchsettings.json是一种便于在开发机器上轻松测试的工具。

答案 1 :(得分:2)

我可以通过执行PowerShell命令和以下代码来获取值“Test”:

var environment = Environment.GetEnvironmentVariable(
    "ASPNETCORE_ENVIRONMENT",
    EnvironmentVariableTarget.Machine);