为什么在 Visual Studio 中添加解决方案文件夹会更改项目文件,有什么办法可以防止这种情况发生?

Why does adding a solution folder in Visual Studio change project files, and is there any way to prevent this?

我正在向我们项目的主要 git 存储库中的许多解决方案添加一个测试项目。

在此过程中,我注意到向 .sln 文件添加 "Solution Folder" 会修改解决方案中的许多项目。我想不出会出现这种情况的合乎逻辑的理由。我只是说添加解决方案文件,之前我添加测试项目

解决方案中的所有项目都是 C# 项目,如果这会有什么不同的话。

有谁知道为什么会这样。这是预期的行为还是错误?另外,有什么办法可以防止这种情况发生吗?

下面的两张图片突出了我所说的行为:

添加新的解决方案文件夹之前:

添加新解决方案文件夹后:

据我所知,这些更改毫无意义:

这有点奇怪,但是当人们有多种解决方案并在一个解决方案中修复外壳而不是另一个解决方案时,就会发生这些事情。当项目文件为 re-rendered(因为添加、重命名、更改解决方案项等)时,它将选择更正后的外壳。如果解决方案文件有 'correct' 大小写,则不会发生任何变化,但如果解决方案文件不匹配,则可能导致此级联。

在一种解决方案中固定外壳可能会在另一种解决方案中触发相反的行为。因此,这必须立即在所有解决方案文件中修复。如果您有多个分支机构,请小心。

解决此问题的最佳方法是一次解决文件系统、项目文件和解决方案文件的大小写问题。使用文本编辑器通常比通过 Visual Studio 项目系统更容易。正则表达式搜索和替换在这里可以创造奇迹。确保一次修复所有这些问题:

  • (全部)解决方案文件的内容
  • 导致问题的 .*proj 文件
  • 文件系统路径(您可能必须先更改多个案例才能进行案例更改)。还要确保您的版本控制系统将接受更改。
  • 其他 .*proj 文件中的项目引用

修复单个项目的大小写后,更改可能会级联到引用有问题项目的其他项目文件。项目文件中的 ProjectReference 元素具有到有问题的项目的相对文件系统路径,并且还捕获其名称。您可以在您发布的屏幕截图中清楚地看到这一点: