【问题标题】:Environment variable not changing as I hope环境变量没有像我希望的那样改变
【发布时间】:2018-02-16 00:48:18
【问题描述】:

我使用 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"
    }
  }
}

【问题讨论】:

  • 你用过AddEnvironmentVariables(IConfigurationBuilder, String)。您可以尝试向我们展示一些代码。
  • 您是否将其添加到运行 ASP 服务的任何用户的环境中?
  • 您是否在同一个 powershell 脚本中运行您的应用程序? Powershell 只能为当前会话设置环境变量,当脚本结束时它们会被还原。

标签: c# asp.net-core


【解决方案1】:

这是docs 的预期行为:

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

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

【讨论】:

  • 你完全理解我的疑惑。谢谢。
【解决方案2】:

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

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

【讨论】:

  • 谢谢!!!为什么我必须告诉GetEnvironmentVariable 使用EnvironmentVariableTarget.Machine?在找到您的答案之前,我已经将头撞在这堵墙上 1.5 天了。希望我能投票更多。
猜你喜欢
  • 1970-01-01
  • 2021-11-30
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多