appsettings.json配置文件的更改未被识别?

5
我最近注意到Visual Studio中的一些奇怪行为。如果我编辑了我的 `appsettings.json` 文件,然后在调试模式下运行(按 F5),编译器不会获取到更改的配置。

这个问题在VS 17.7中通过https://github.com/dotnet/project-system/pull/9130得到了修复。 - undefined
5个回答

5

出现这种情况似乎是因为 Visual Studio v17.5(2023年2月)引入了一个名为“Build Acceleration”的新功能。

发布说明:https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes
构建加速:https://github.com/dotnet/project-system/blob/main/docs/build-acceleration.md

enter image description here

构建加速仅重新编译有代码更改的项目。它不会识别具有“Build Action: None”的设置文件的更改,这是默认值。 以前VS会运行MSBuild,更新更改的文件并运行构建。现在VS自己处理文件更改,并且只在需要时调用MSBuild。结果是,对设置文件的编辑不会被捕获,除非您在运行调试之前也编辑代码文件或显式构建(Ctrl+BCtrl+Shift+B)。

GitHub上的测试项目

编辑:经过一些测试,Build Action: Embedded Resource似乎效果最好。我尝试了Content,但仍然遇到了相同的问题,而Resource则引发了运行时错误。如果您想实验,请获取上面的测试项目。


@GuruStron 很好的观点。它可能确实复制了新内容,但它没有将其传递给编译器 - 也许编译器正在使用缓存副本? - AndyS
我尝试创建一个新项目来检查appsettings.json的默认构建操作,结果是Content而不是None - tia
嗨@tia,感谢您的反馈。我刚刚创建了一个新的测试项目Console app(VS 2022-v17.5.2),添加了一个settings.json文件,默认设置为“None”,“Do Not Copy”。我将其更改为“Content”,“Copy always”,但仍然存在所描述的问题。经过多次测试设置,我发现“Build Action: Embedded Resource”是唯一有效的设置。我会在Github上放置一个测试项目,并在此处添加链接。 - AndyS
@AndyS,你对于新文件是正确的,但如果你创建了一个新的ASP.NET项目,它会带有“Content”和“Copy If Newer”。无论如何,我也可以重现你发现的问题。我想补充一点的是,如果Program.cs中有任何更改,新的设置将被采用。 - tia
我可以重现你的问题,并将其报告。通常,我倾向于在修改文件后清理和重建程序。 - Jiale Xue - MSFT
显示剩余3条评论

4

根据你提到的链接,这个问题已经在此期间(2023年8月9日)得到修复。 - undefined
没错!我已经在https://github.com/dotnet/project-system/pull/9130中修复了这个问题。 - undefined

1

0

面临相同的问题,有一个解决方法,但是并不方便所有人,但在他们提供修复之前,可以这样做。

  1. 运行清理操作。
  2. 运行重建解决方案。

然后,当您运行代码时,它将开始捕捉到appsettings.json文件中的更改。仍在寻找更好的解决方案,如果找到了会进行更新。


0

我的解决方法是:

  1. 打开appsettings.json的属性
  2. “复制到输出目录”更改为其他值
  3. Ctrl + S
  4. “复制到输出目录”恢复为原始值
  5. Ctrl + S
  6. 构建并运行。

可怕的解决方案...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接