首页 > 解决方案 > 在 .NET Framework 4.7.2 应用程序中为 IHostEnvironment 设置环境变量

问题描述

我正在开发一个 .NET Framework(不是 Core)应用程序,但正在实现一个IHostIHostBuilder风格的启动。我正在尝试根据对环境的理解使用IHostEnvironment来加载不同的配置:HostBuilderContext

 host = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, config) =>
      {
       IHostEnvironment env = context.HostingEnvironment;

       config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
       config.AddJsonFile($"appsettings.{env.EnvironmentName}.json, true, true);
      })
...

在 .NET Core 应用程序中,您可以在 Visual Studio UI 的项目属性文件中设置DOTNET_ENVIRONMENT(或ASPNETCORE_ENVIRONMENTlaunchSettings.json )变量,也可以在项目文件中设置它。我能找到的关于这个主题的所有文档都与以这种方式实现它有关。

完整的 .NET Framework 4.7.2 项目没有在项目设置 UI 中更新环境变量的选项,并且不使用启动设置文件。

在 .NET Framework 4.7.2 应用程序中更新DOTNET_ENVIRONMENTIHostEnvironment变量以便有效使用该变量的适当方法是什么?

标签: c#.netappsettings

解决方案


不确定这是“官方”还是“适当”的方式,但它应该有效。我似乎记得几年前 .NET Core 是 1.0 时这样做,但我仍在使用 Framework。

ConfigureAppConfiguration.

...
    .ConfigureAppConfiguration((context, config) =>
    {
        ...
        config.AddEnvironmentVariables();
    })

然后在本地调试时,您有几个选择。

  • *_ENVIRONMENT使用已设置的常用变量之一运行 VS ;然后这些将在调试时传播到您的应用程序,或者
  • 创建一个 shim.bat文件,在那里设置变量,然后调用您的应用程序。将其设置为在主应用程序的项目属性(Alt-Enter在 VS 中的项目节点上)内运行的程序。

您可以通过为每个环境(例如配置)创建构建配置(除调试和发布之外)来增加上述内容,该Development配置设置可以传递给您的启动 shim 的 MSBuild 属性。不过那是有味道的……一些开发人员不喜欢这种额外配置的想法。

最后,这部分有点推测,但最终任何配置项都来自配置提供程序(例如 JSON 文件、环境变量、像 SQL 服务器这样的持久性存储等)。您实际上可以在其中一个中设置此值或编写一个设置值的自定义提供程序。换句话说*_ENVIRONMENT ,根本不必是环境变量

当您需要在机器之外进行部署时,只要您的构建管道设置为正确获取这些变量,上述所有内容都应该很好地转换。


推荐阅读