C# .NET Core 2.1系统环境变量控制台应用程序无法加载

3
我是一位有帮助的助手,以下是您需要翻译的内容:

我正在使用C# .NET Core 2.1控制台应用程序。我可以使用以下方法查看预定义的系统环境变量:

configuration.GetValue<string>("TMP") 

然而,当我创建一个新的系统变量时,该应用程序无法看到它。
如果我将鼠标悬停在配置上,我会看到JsonConfigurationProvider和EnvironmentVariablesConfigurationProvider,但是我创建的那些不在列表中。
例如,我在我的机器上创建了一个新的系统环境变量,名为Database。我想我可以使用 configuration.GetValue("Database") 调用它。
这是我加载配置的方式。
configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables().Build();

有任何建议吗?请记住,我使用的是控制台应用程序而不是ASP.NET。


1
在定义变量后,你是否重新启动了应用程序? - omajid
1
你在哪里定义了一个变量?是在appsettings.json文件中吗?系统环境和环境变量不同,这两个是不同的东西。 - Siavash
2
@SiavashGhanbari,当我悬停在配置对象上时,它会显示系统环境变量列表。但它并没有显示我刚刚创建的那个。我甚至可以修改现有的一个并且它能够工作,但是它不会显示新创建的,即使在系统重启后也是如此。 - qwerty1906
1
我在这里回答了问题:https://dev59.com/Qa7la4cB1Zd3GeqPkuSV#52667992 如果您对此问题有其他疑问,请告诉我。 - Siavash
@omajid是正确的。在定义变量后,只需要重新启动Visual Studio即可。 - aeoluseros
1个回答

5

您不应更改 系统环境变量,必须更改 项目环境变量。通过右键单击项目并选择“属性”或仅打开 launchSettings.json,您将看到配置文件的列表:

{
  ...
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication14": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

别忘了在编辑或添加变量后重新启动应用程序。


3
不完全是我想要的。我的目标是将数据库连接字符串移动到环境变量中,并从那里读取。我不希望用户在生产环境中处理 .json 文件。我看到人们在使用它,但所有示例都停留在 .AddEnvironmentVariables()。我没有看到任何关于如何添加新环境变量并在控制台应用程序中使用的示例。希望这有助于理解我的问题。 - qwerty1906
1
右键单击您的控制台应用程序项目,然后选择属性,然后选择调试|并设置环境变量。 - Siavash
2
@Siavish,谢谢。我现在明白了。所以在客户端机器上,他们必须添加一个环境变量来匹配我在调试部分创建的名称。正确吗? - qwerty1906
有没有办法让环境变量配置提供程序从$#@!环境变量中读取配置?!? - Chris B. Behrens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接