c# - 在 .NET Framework 4.7.2 应用程序中为 IHostEnvironment 设置环境变量
问题描述
我正在开发一个 .NET Framework(不是 Core)应用程序,但正在实现一个IHost
和IHostBuilder
风格的启动。我正在尝试根据对环境的理解使用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
变量以便有效使用该变量的适当方法是什么?
解决方案
不确定这是“官方”还是“适当”的方式,但它应该有效。我似乎记得几年前 .NET Core 是 1.0 时这样做,但我仍在使用 Framework。
从您的ConfigureAppConfiguration
.
...
.ConfigureAppConfiguration((context, config) =>
{
...
config.AddEnvironmentVariables();
})
然后在本地调试时,您有几个选择。
*_ENVIRONMENT
使用已设置的常用变量之一运行 VS ;然后这些将在调试时传播到您的应用程序,或者- 创建一个 shim
.bat
文件,在那里设置变量,然后调用您的应用程序。将其设置为在主应用程序的项目属性(Alt-Enter在 VS 中的项目节点上)内运行的程序。
您可以通过为每个环境(例如配置)创建构建配置(除调试和发布之外)来增加上述内容,该Development
配置设置可以传递给您的启动 shim 的 MSBuild 属性。不过那是有味道的……一些开发人员不喜欢这种额外配置的想法。
最后,这部分有点推测,但最终任何配置项都来自配置提供程序(例如 JSON 文件、环境变量、像 SQL 服务器这样的持久性存储等)。您实际上可以在其中一个中设置此值或编写一个设置值的自定义提供程序。换句话说*_ENVIRONMENT
,根本不必是环境变量。
当您需要在机器之外进行部署时,只要您的构建管道设置为正确获取这些变量,上述所有内容都应该很好地转换。
推荐阅读
- php - 在wordpress中将“设置->阅读”从摘要更改为全文时出现无效的RSS提要错误
- wsdl - 无法实例化部署程序 org.apache.axis2.deployment.ServiceDeployer 如何在soapclient 中解决此问题?
- smtp - 消息:stream_socket_enable_crypto():对等证书 CN=`some-address-here` 与预期的 CN=`127.0.0.1' 不匹配
- php - 从文件 pdf.p7m 中提取证书的 PHP 代码
- ios - Xcode:在 Xcode 故事板中自定义字体显示错误样式
- javascript - 如何使用带有 jquery ui 自动完成功能的搜索按钮?
- trigonometry - 将极坐标转换为笛卡尔点的最简单方法
- botframework - 刷新 Teams Bot 图标 + 名称
- express - 如何在 nginx proxy_pass 站点中启用链接文件?
- java - 通过 InetAddress API 进行的 DNS 查找未按预期工作