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

C# 当存在aspNetCore web.config节时,为什么不加载launchSettings.json配置文件中的环境变量?,c#,asp.net,asp.net-core,.net-core,iis-express,C#,Asp.net,Asp.net Core,.net Core,Iis Express,我们最近将.NET Core 2.1 Web应用升级为.NET 3.1。从那以后,我们在launchSettings.json中的配置文件就无法正常工作。具体来说,环境变量没有加载,其中一个变量是“ASPNETCORE_ENVIRONMENT”。当本地调试到不同的环境时,我们使用它来切换appSettings.{Environment}.json 在我的研究中,web.config似乎是这个问题的罪魁祸首。对于上下文,我们在项目中保留了一个web.config,以便为部署定制一些东西。所讨论的配

我们最近将.NET Core 2.1 Web应用升级为.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退出进程,那么启动配置文件也可以工作,但是如果可能的话,我们宁愿保持进程

这是怎么回事?我们是否错过了一些迁移步骤?我们遵循MSDN上的所有步骤,从这里开始,一直到3.1:

复制步骤
  • 创建新的ASP.NET核心Web应用程序3.1
  • 创建一个使用IISExpress的launchSettings.json配置文件,该配置文件具有
    “环境变量”:{“ASPNETCORE\u环境”:“SomeTestValue”}
  • 运行该启动配置文件,并在Startup.cs的
    Configure
    中的
    IWebHostEnvironment
    上检查环境值
  • 请注意,
    env.EnvironmentName
    应该与“SomeTestValue”匹配
  • 现在,将以下web.config文件添加到项目中:
  • 
    
  • 运行相同的配置文件并检查环境值。它应该是您的机器的默认值(在大多数情况下为“生产”,在未找到/指定时为默认值)
  • 修复:将Visual Studio 2019更新为v16.6.3(提前1天发布!)

    天哪,是Visual Studio。我当时正在运行VS201916.6.2,今天刚收到更新为16.6.3的通知,但推迟了。在研究了stack、github、msdn等之后,我发现这些帖子让我发现这是VS的16.6.2版本中的一个bug(可能还有更早的版本),而刚刚发布的更新修复了它

    与该问题的相关链接

    这导致:

    这导致了对VS更新的评论:

    该评论中链接的文档没有特别提到此修复。我找不到完整的发行说明。

    但无论如何,更新到VS 2019 16.6.3是可行的。我可以保留我的aspNetCore web.config设置,并立即正确加载启动配置文件环境变量。胡萨

    谈论更新的最佳时机

    此外,许多浏览器选项卡和RAM字节在搜索这个答案时失去了生命。尊敬。