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

时间:2019-06-10 15:40:02

标签: visual-studio project-files solution-folders

我正在将测试项目添加到项目主git存储库中的许多解决方案中。

在此过程中,我注意到在.sln文件中添加“解决方案文件夹”会修改解决方案中的许多项目。我认为没有逻辑原因会是这种情况。我只是在谈论添加解决方案文件,而在我添加测试项目之前。

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

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

下面的两个图像突出了我正在谈论的行为:

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

Before adding solution folder.  No project changes.

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

After adding solution folder.  Project files have changed.

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

The project files changes are meaningless.

1 个答案:

答案 0 :(得分:2)

这有点奇怪,但是当人们有多个解决方案并将外壳固定在一个解决方案中,而不是另一个解决方案中时,就会发生这些事情。当项目文件被重新渲染时(因为添加了项目,重命名,更改了解决方案项等),那么它将选择更正的大小写。如果解决方案文件的大小写为“正确”,则不会有任何更改,但是如果解决方案文件不匹配,则可能导致级联。

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

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

  • (所有)解决方案文件的内容
  • 引起问题的.*proj文件
  • 文件系统路径(为了使大小写更改,您可能必须先更改大小写)。还要确保您的版本控制系统会进行更改。
  • 该项目在其他.*proj文件中的引用

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

enter image description here