当 aspNetCore web.config 部分存在时,为什么 launchSettings.json 配置文件中的环境变量不加载?

Why do environmentVariables from launchSettings.json profiles not load when aspNetCore web.config sections exist?

我们最近将 .NET Core 2.1 Web App 升级到了 .NET 3.1。从那以后,我们在 launchSettings.json 中的配置文件无法正常工作。具体来说,环境变量没有加载,特别是“ASPNETCORE_ENVIRONMENT”。我们在本地调试时使用它来切换 appSettings.{Environment}.json 以针对不同的环境。

在我的研究中,web.config 似乎是这个问题的罪魁祸首。对于上下文,我们在项目中保留 web.config 以便我们可以为我们的部署定制一些东西。有问题的配置文件使用 IISExpress,因此考虑了 web.config。

如果我删除 web.config,我可以切换启动配置文件并且它们会生效。但是,当存在 web.config 时,启动配置文件环境变量不会生效。

现在更好奇的是,如果我从 web.config 中删除这一部分,启动设置中的环境变量将再次开始工作:

这可能与从 OutOfProcess(.NET 2.1 默认值)到 InProcess(.NET 3.1 默认值)的托管模型更改有关。事实上,如果我们将项目的 hostingModel 强制设置为 OutofProcess,启动配置文件也可以正常工作,但如果可能,我们宁愿保留 InProcess。

这是怎么回事?我们是否缺少一些迁移步骤?我们遵循了 MSDN 上的所有步骤,从这里开始一直到 3.1:https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-3.1&tabs=visual-studio

复制步骤

  1. 创建一个新的 ASP.NET 核心 Web 应用程序,3.1
  2. 创建一个使用 IISExpress 的 launchSettings.json 配置文件,并具有 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "SomeTestValue" }
  3. 运行 启动配置文件并检查 Startup.cs 的 ConfigureIWebHostEnvironment 的环境值。
  4. 请注意 env.EnvironmentName 应匹配“SomeTestValue”。
  5. 现在将以下 web.config 文件添加到您的项目中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="false" arguments="%LAUNCHER_ARGS%" hostingModel="inprocess" />
  </system.webServer>
</configuration>
  1. 运行 相同的配置文件并检查环境值。它应该是您机器的默认值(在大多数情况下为“Production”,这是 none 为 found/specified 时的默认值)。

修复:将 Visual Studio 2019 更新到 v16.6.3(提前 1 天发布!)

天啊,真是Visual Studio。我是 运行 VS 2019 16.6.2 我今天刚收到更新到 16.6.3 的通知,但推迟了。好吧,在研究了整个堆栈、github、msdn 等之后,我发现这些帖子让我看到它是 VS 16.6.2 版本(也可能是早期版本)和更新中的一个错误刚刚出来修复它。

问题的相关链接

ASP.Net Core MVC needs <environmentVariables> in web.config to work

导致: https://github.com/dotnet/websdk/issues/564#issuecomment-644714341

这导致了关于 VS 更新的评论:https://github.com/dotnet/websdk/issues/1510#issuecomment-652012087

该评论中链接的文档没有具体提及此修复。我找不到完整的发行说明。 https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes#16.6.3

但无论如何,更新到 VS 2019 16.6.3 都有效。我可以保留我的 aspNetCore web.config 设置,并且现在可以正确加载启动配置文件环境变量。万岁!

谈论更新的最佳时机...

此外,许多浏览器选项卡和 RAM 字节在搜索此答案时丧生。尊重。