Linux env var NETCORE_ENVIRONMENT 上的 .NET Core 控制台应用程序 - 必要吗?

.NET Core Console app on Linux env var NETCORE_ENVIRONMENT - necessary?

当 运行 控制台应用程序时,环境变量 NETCORE_ENVIRONMENT=Production 有什么意义吗?

在 asp.net 核心中有 ASPNETCORE_ENVIRONMENT=Production - 这(据我所知)改变了应用程序以使用 appsettings.Production.json.

NETCORE_ENVIRONMENT是否存在,使用它有什么效果?

(大约一年前我在安装 5.0 应用程序时在我的脚本中找到它,现在我在 Google 上找不到它的任何参考)

TL;DR DOTNET_ENVIRONMENT 被 .NET 5 和 6 的控制台应用程序中的 HostBuilder 使用(可能早在 3.x 时)。除此之外,它只是一个常见的环境变量,您还可以使用它来确定环境,以防您想执行以下操作:

if (Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") == "Development")
{
    builder.AddUserSecrets<Program>();
}

我相信 .NET 5 & 6 ASPNETCORE_ENVIRONMENTDOTNET_ENVIRONMENT 是有意义的环境变量。如果两者均未设置,则默认为 Production。当 运行 来自 ASP.NET Core 时 WebApplication.CreateBuilder 将更喜欢 ASPNETCORE_ENVIRONMENT 如果它们都存在。

再补充一点,我不认为默认设置了任何值。我刚刚检查了我的本地 Ubuntu 服务器,上面安装了全新的 .NET 6,这些环境变量不是由安装程序创建的。

以下使用 HostBuilderHostingEnvironment 应反映 DOTNET_ENVIRONMENT 的值。它仍然感觉不直观,因为我必须添加 prefix: "DOTNET_" 部分。

class Program
{
    static void Main(string[] args)
    {
        var builder = new HostBuilder();

        builder.ConfigureHostConfiguration(config =>
        {
            config.AddEnvironmentVariables(prefix: "DOTNET_");
        });


        builder.ConfigureAppConfiguration((context, config) =>
        {
            Console.WriteLine($"HostBuilder Environment in ConfigureAppConfiguration: {context.HostingEnvironment.EnvironmentName}");
        })
        .UseDefaultServiceProvider((context, options) =>
        {
            Console.WriteLine($"HostBuilder Environment in UseDefaultServiceProvider: {context.HostingEnvironment.EnvironmentName}");
        });

        builder.Build();
    }
}

相关:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-6.0