c# - .NET Core 3.1 应用程序找不到环境变量
问题描述
我无法让我的 .NET Core 3.1 控制台应用程序识别我的自定义系统环境变量。我可以提取和打印其他系统变量,例如用户名。但是,如果我在下面的示例中设置了一个像“TestKey”这样的自定义项,它们在应用程序中始终为空。
这是我的代码:
static void Main()
{
var config = new ConfigurationBuilder().AddEnvironmentVariables().Build();
var value = config.GetValue<string>("TestKey");
var envValue = Environment.GetEnvironmentVariable("TestKey");
Console.WriteLine($"Config Variable is: {value}");
Console.WriteLine($"Environment Variable: {envValue}");
}
这是输出:
和系统变量清楚地显示变量已设置:
同样,当我从命令提示符对 TestKey 变量执行回显时,它会正确返回关联的值。
这是一台 Windows 10 Pro 计算机,它不是域的一部分。这种行为着实令人费解。我已重新启动计算机,系统变量仍然存在,但仍不会出现在应用程序中。
解决方案
这里有两个要点。首先,根据ASP.NET Core 中的配置,只为当前进程检索环境变量
仅在从设置它们的命令窗口启动的进程中设置
因此,您应该在启动应用程序或添加到launchsettings.json
文件之前在同一命令窗口中设置它们
"environmentVariables": {
"Test": "Test",
"ASPNETCORE_ENVIRONMENT": "Development"
}
并为此重新启动 Visual Studio。或者只是在项目的调试属性中更改它
二、要能够在GetEnvironmentVariable
method中获取系统环境变量,需要指定EnvironmentVariableTarget.Machine
参数
var envValue = Environment.GetEnvironmentVariable("Test", EnvironmentVariableTarget.Machine);
默认
该
GetEnvironmentVariable(String)
方法仅从当前进程的环境块中检索环境变量
或者,如果您将变量添加到launchsettings.json
上一点,则不需要设置目标。
但是,如果您将在命令行中通过 运行您的项目dotnet run
,您应该也可以访问系统环境变量,因为
在 Windows 系统上,当前进程的环境块包括:
创建它的父进程提供给它的所有环境变量。例如,从控制台窗口启动的 .NET 应用程序会继承控制台窗口的所有环境变量。
如果没有父进程,则使用每台机器和每用户的环境变量。例如,一个新的控制台窗口在启动时定义了所有每台机器和每用户的环境变量。
推荐阅读
- django - 从在事件循环中运行的异步函数中调用 Django ORM 查询
- excel - 根据来自不同列的 ID 将单元格范围复制到 Word 文档
- c - 在链表尾部插入
- python - 如何展平Python字典中键的值(元组列表列表)?
- laravel - 如何在 laravel 中上传 pdf 或 doc 文件
- python - 获取列表列表中每个元素的索引并制作字典
- angularjs - AngularJS & IntelliJ / WebStorm - 代码完成
- agda - 我什么时候应该使用数据类型与计算类型
- python - 无法隐藏相互接触的 x 个刻度和子图
- word-cloud - 有时文本不会在 React-vega Word Cloud 中呈现