【问题标题】:.NET Core 3.1 application not finding environment variable.NET Core 3.1 应用程序找不到环境变量
【发布时间】:2020-04-11 17:53:33
【问题描述】:

我无法让我的 .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 计算机,它不是域的一部分。这种行为着实令人费解。我已经重新启动计算机,系统变量仍然存在,但仍然不会出现在应用程序中。

【问题讨论】:

  • 您需要重新启动服务器才能访问新的环境变量。

标签: c# asp.net-core .net-core


【解决方案1】:

这里有两个要点。首先,根据Configuration in ASP.NET Core,只为当前进程检索环境变量

仅在从它们所在的命令窗口启动的进程中设置 设置在

因此,您应该在启动应用程序之前在同一命令窗口中设置它们或添加到launchsettings.json 文件中

"environmentVariables": {
  "Test": "Test",
  "ASPNETCORE_ENVIRONMENT": "Development"
}

并为此重新启动 Visual Studio。或者只是在项目的 Debug 属性中更改它

其次,要能够在GetEnvironmentVariable方法中获取系统环境变量,需要指定EnvironmentVariableTarget.Machine参数

var envValue = Environment.GetEnvironmentVariable("Test", EnvironmentVariableTarget.Machine);

默认情况下

GetEnvironmentVariable(String) 方法检索环境 仅来自当前进程的环境块的变量

或者,如果您将变量添加到上一点的launchsettings.json,则不需要设置目标。

但是,如果您将通过dotnet run 在命令行中运行您的项目,您应该也可以访问系统环境变量,因为

在 Windows 系统上,当前进程的环境块 包括:

  • 由创建它的父进程提供给它的所有环境变量。例如,一个 .NET 应用程序从 控制台窗口继承了控制台窗口的所有环境 变量。

  • 如果没有父进程,则使用每台机器和每用户的环境变量。例如,一个新的控制台 window 定义了所有每台机器和每用户的环境变量 在它推出时。

【讨论】:

  • EnvironmentVariableTarget.Machine 帮了我大忙,因为我使用的是系统环境变量
【解决方案2】:

底线:我不得不重新启动我的网络服务器。

我也遇到了同样的问题,从剃刀的角度来看,我遇到了这个......

@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment env
.
.
<div>
    Environment is @env.EnvironmentName
</div>
<environment include="Development">
    <strong>You are in the Development environment</strong>
</environment>

在 ASPNETCORE_ENVIRONMENT 变量中我有“开发”

该页面从未看到“开发”,它始终默认为“生产”(它应该是)。重新启动网络服务器为我“修复”了它。我不确定是重新启动还是我可以回收应用程序池。我正在使用 .net core 3.1

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2020-05-12
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多