代码之家  ›  专栏  ›  技术社区  ›  user1451111

IHostEnvironment。EnvironmentName VS Environment。GetEnvironmentVariable(“DOTNET_ENVIRONMENT”)

  •  0
  • user1451111  · 技术社区  · 3 年前

    在ASP。NET核心Web API应用程序,使用构建。NET 6,是 IHostEnvironment.EnvironmentName Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") 总是一样?如果没有,它们在什么情况下会有所不同?

    详细地说,我的问题是关于 IHostEnvironment 注入的实例 Startup 的构造函数。NET。像这样的东西 Startup(IHostEnvironment env)

    0 回复  |  直到 3 年前
        1
  •  1
  •   Philippe Desmarais    3 年前

    请参阅 here 有关如何确定环境的完整文档

    其要点是读取DOTNET_ENVIRONMENT和ASPNETCORE_Environmental来确定环境。根据您使用的构建器,其中一个可以优先于另一个。

    使用WebApplicationBuilder时,DOTNET_ENVIRONMENT值将覆盖ASPNETCORE_ENVIRONMENT。对于其他主机,如ConfigureWebHostDefaults和WebHost。CreateDefaultBuilder,ASPNETCORE_Environmental具有更高的优先级。

    或者,也可以提供环境作为命令行参数,如下所示: dotnet run --environment Production

    最后,也可以将环境作为参数提供给构建器本身:

    WebApplication.CreateBuilder(new WebApplicationOptions
    {
        EnvironmentName = Environments.Staging
    }); 
    

    尽管我不得不说我从来没有这么做过。总而言之,考虑到有多少可能的来源,读取环境变量而不是使用IHostingEnvironment绝对不是一个好主意。

    最后一件事。环境默认为“生产”,除非明确使用默认值,否则环境变量不会执行此操作。

        2
  •  1
  •   Md Farid Uddin Kiron    3 年前

    IHostEnvironment。环境名称和 环境GetEnvironmentVariable(“DOTNET_ENVIRONMENT”)始终 相同的

    在进入你的主要问题之前,它需要一个简短的背景,但我保证它会让你知道你好奇的地方。

    IHostEnvironment。环境名称:

    通常地 IHostEnvironment.EnvironmentName 的asp.net核心版本早于6,它源自 IHostEnvironment Interface 它通过从中读取信息,向我们返回有关应用程序正在运行的托管环境的信息 launchSettings.json 如下所示:

    enter image description here

    enter image description here

    环境GetEnvironmentVariable():

    来自dotnet 6 IHostEnvironment。环境名称 不再使用,取而代之的是 Environment.GetEnvironmentVariable() 它还从中检索环境变量名 launchSettings.json 它派生自Environment静态类,如下所示:

    enter image description here

    enter image description here

    因此 IHostEnvironment。环境名称 早于dotnet6和 环境GetEnvironmentVariable() 晚于dotnet6的都为我们提供了应用环境的信息。例如,无论是开发、生产还是阶段。

    如果没有,它们在什么情况下会有所不同?

    IHostEnvironment中的DOTNET_ENVIRONMENT。环境名称:

    实际上,取决于 DOTNET_ENVIRONMENT ASPNETCORE_ENVIRONMENT 我们可能会经历不同的结果。因为 DOTNET_ENVIRONMENT 值覆盖 ASPNETCORE_ENVIRONMENT 当你在asp.net核心版本中使用时,它会覆盖6;因此,您仍然可以准确地获得环境变量的名称。如下所示:

    enter image description here

    环境中的DOTNET_ENVIRONMENT。GetEnvironmentVariable():

    然而,它在asp.net核心6和更高版本中的作用并不一致,这与asp.net内核6的旧版本不同。因为 ASPNETCORE_ENVIRONMENT 具有更高的优先级 DOTNET_ENVIRONMENT 你最终会得到完全不同的结果。对于 DOTNET_ENVIRONMENT 你会变成空的 EnvironmentVariable 您可以在下面看到:

    enter image description here

    注: 总之,它们都用于在运行时获取应用程序环境变量信息。但在DOTNET_ENVIRONMENT优先级上的denpending,它们的值不同。如果你还想了解更多细节,你可以 check our official document here