MSBuild:命令行构建错误:解决方案文件错误MSB5023:解析嵌套项目部分时出错。

37

我有一个解决方案,使用“解决方案文件夹”来分离项目。在 Visual Studio IDE 中,该解决方案可以正常构建。

但是,在使用命令行中的 MSBuild 进行构建时,出现以下错误:

解决方案文件错误 MSB5023:解析解决方案文件中的嵌套项目部分时出错。列表中列出了 GUID 为“{Some Project GUID}”的项目作为“{Some Solution Folder Project GUID}”项目下的子项,但在解决方案中不存在。

现在我已经检查了这两个 GUID,它们都存在,一个是项目,另一个是该项目嵌套的解决方案文件夹。应该没有任何问题。

请问是否有方法解决这个问题?


请注意,这不是重复问题,但与该问题有非常相似的解决方法:https://dev59.com/EGw15IYBdhLWcg3wcrhC - StayOnTarget
7个回答

90

我遇到了同样的问题并成功解决了:

  1. 在NotePad中打开.sln文件并找到Guids
  2. 我的一个项目没有关闭(缺少了"EndProject")

祝好,希望这能帮助任何人。


5
这对我来说是解决方案。在 Git 冲突之后,我的 sln 文件格式不正确,缺少了 EndProject 行。 - gvdm
1
我在解决git冲突后遇到了这个问题。我发现.sln文件中的"EndProjectProject"连接在一起,只需添加换行符进行分割即可。 - Artem Kolokoltsev
1
虽然我的问题不是缺少EndProject标签,但这确实有所帮助!原来我的解决方案试图添加一个已经不存在的ProjectSection。我移动了ProjectSection,问题得到了解决。 - bluefox

27

或者你可以向solution添加一个新文件并保存。这样应该会重建解决方案。确认构建正常工作后,可以安全地删除并保存该文件。


1
我添加了一个解决方案项并保存了解决方案。如果您添加文件到项目中,我不确定是否会发生同样的事情。 - Daniel Gabriel
2
当我这样做时,它创建了一个“解决方案项”文件夹(后来我将其删除)。此过程纠正了错误,原来是缺少了“EndProject”行。 - StayOnTarget
1
对我来说,这也有所帮助。问题不在于缺少 EndProject,而是在 .sln 中留下了一个应该被删除的残留 guid。 - Mr. Blond
哦,这太棒了,谢谢。Git合并搞乱了我的sln,我不知道该怎么办...只是按照你说的做了,添加了一个项目,保存...嘭,问题解决了(愚蠢的事情是在vs中构建,而不是在dotnet cli中)。唉。 - Piotr Kula

6

这个问题可能已经有答案了,但我会提供步骤让它更容易理解。

修复步骤:

  1. 向解决方案中添加一个新的虚拟项目
  2. 使用“保存全部”按钮更新解决方案
  3. 删除之前添加的虚拟项目并进行构建。问题就解决了
  4. 另外,如果您正在使用源代码控制,请将更新后的 .sln 文件与旧文件进行比较,以了解缺失的更改。

4

可能会出现这样一种情况,即线路可能会在项目删除时未被删除,导致合并冲突。如果您无法在全局搜索GUID时找到任何其他与之相关的引用,请尝试删除.sln文件中的该行,并重新构建。


1

有可能是合并冲突问题导致 .sln 文件发生了改变,可以通过在您喜欢的文本编辑器中打开并检查是否有任何冲突标记来确认这一点。


1
由于合并冲突,我的解决方案文件试图将两个项目粘贴到一个不再存在的解决方案文件夹中。底部附近的NestedProjects部分提到了一个在顶部的Project枚举中已删除的Guid。

0
我创建了一个空解决方案并添加了我的csproj文件。 之后,我的Azure DevOps中的YAML可以构建这个应用程序。

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