Visual Studio 2017 在加载解决方案时挂起

Visual Studio 2017 hangs while loading a solution

我有一个包含 4 个项目的解决方案。

每次我启动 Visual Studio 2017 社区 (15.6.2) 并加载解决方案时,它在加载第一个项目 (Ananas) 时挂起。

我可以坐等它加载 30 分钟或更长时间,但进度条只会一直显示动画。我必须完全杀死 Visual Studio 才能阻止它。

如果我随后删除解决方案文件夹,并从我藏起来的备份存档中重新解压它并再次加载它,它会在第一次加载时不会挂起。但是当我关闭解决方案,关闭Visual Studio,重新启动并再次加载它时,它又开始挂起。

如果您检查解决方案 (SLN) 文件,您可能会发现两个或多个项目的 GUID 重复。请参阅下面的示例。

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ananas", "Ananas\Ananas.csproj", "{F16C0F09-8509-4370-B4FF-C6E1C1C27C31}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bananas", "Bananas\Bananas.csproj", "{9D7771AE-8A04-438E-858A-7DBD42025BF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cherries", "Cherries\Cherries.csproj", "{91FB0CB7-5DC1-4B86-B33C-F22BE6A11CF2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dewberries", "Dewberries\Dewberries.csproj", "{424ABA82-B745-4376-8A52-632B9016608E}"
EndProject

如您所见,第一个和最后一个项目具有相同的 GUID,中间的两个项目也具有相同的 GUID。您需要做的是生成一个有效的 GUID 来区分冲突的项目。这样,您将得到如下内容。

Project("{2CD1389C-9B3D-41E9-9AC4-FB6402671C81}") = "Ananas", "Ananas\Ananas.csproj", "{F16C0F09-8509-4370-B4FF-C6E1C1C27C31}"
EndProject
Project("{73ED998E-CD14-48E9-8193-A60F496F9CD7}") = "Bananas", "Bananas\Bananas.csproj", "{9D7771AE-8A04-438E-858A-7DBD42025BF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cherries", "Cherries\Cherries.csproj", "{91FB0CB7-5DC1-4B86-B33C-F22BE6A11CF2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dewberries", "Dewberries\Dewberries.csproj", "{424ABA82-B745-4376-8A52-632B9016608E}"
EndProject

要生成有效的 GUID,我建议您为此使用在线工具,例如 Online GUID Generator

尝试在管理员模式下打开 Visual Studio。

Visual Studio 解决方案文件中有很多不同的 GUID。

根据我对@samirg 回答的评论:

第一个Guid Project("{ <GUID> }") 是.net 项目类型,第二个Guid ".csproj", "{ <GUID> }" 是唯一的项目标识符。您不应更改第一个,但可以将第二个设置为唯一 ID。

Visual studio 生成两者,第一个来自您在创建新项目时 select 的项目类型,第二个唯一标识该项目。

您似乎混合了新旧项目 guid,如 .net 项目系统存储库中所示 README.md

https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md

项目类型 guid(此时每种语言都有 2 个)告诉 Visual Studio 将项目视为旧项目类型或新项目类型。

FAE04EC0-301F-11D3-BF4B-00C04F79EFBCold C# 项目 guid。

9A19103F-16F7-4668-BE54-9A1E7A4F7556new C# 项目 guid。

由于您混合使用了两者,我会将所有旧 guid 更改为新 guid,以确保解决方案行为的一致性。

新的VS2017项目系统有bunch of benefits.

我遇到了同样的问题,删除解决方案目录中隐藏的 .vs 文件夹解决了这个问题。