首页 > 解决方案 > 是否可以重命名 ASPNETCORE_ENVIRONMENT 变量?

问题描述

在类的Configure方法中......StartupASP.NET Core WebAPI project

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

注入IWebHostEnvironmentASPNETCORE_ENVIRONMENT环境变量中的值驱动。

我们可以重命名这个变量吗?如果是,重命名它是一个好习惯吗?

标签: c#asp.net-core.net-coreenvironment-variablesasp.net-core-webapi

解决方案


您不能真正重命名环境变量的名称ASPNETCORE_ENVIRONMENTDOTNET_ENVIRONMENT. 这些内置在默认主机构建器中,您在创建 ASP.NET Core 应用程序时可能会使用这些构建器。

但是,您可以做的是使用您自己的配置源配置主机。这样,您可以从不遵循标准名称的环境变量中注入配置。例如,如果您想从环境变量中读取环境名称stage,则可以修改CreateHostBuilder以包含对ConfigureHostConfiguration修改配置的调用:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureHostConfiguration(c => {
            c.AddInMemoryCollection(new Dictionary<string, string>()
            {
                ["Environment"] = Environment.GetEnvironmentVariable("stage"),
            });
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

请注意,如果您之前调用ConfigureHostConfiguration ConfigureWebHostDefaults,则需要确保您launchSettings.json的变量不包含配置,ASPNETCORE_ENVIRONMENT否则您的自定义变量将被覆盖。您还可以交换这两个调用以使您的环境变量优先于标准名称。当然,这只适用于开发(因为launchSettings.json生产中没有)。

回答你的最后一个问题:这是个好主意吗?可能不是。除非您出于外部原因需要这样做(例如,为了适应您无法控制的现有部署过程),否则您应该坚持使用默认名称以确保所有相关方正确理解影响。

只是为了澄清这一点:两者DOTNET_ENVIRONMENT都很ASPNETCORE_ENVIRONMENT好用,后者不会很快消失。


推荐阅读