【问题标题】:Visual Studio 2017 hangs while loading a solutionVisual Studio 2017 在加载解决方案时挂起
【发布时间】:2020-09-16 19:23:36
【问题描述】:

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

  • 一个 .NET Framework 项目(Ananas)
  • 两个 .NET Core 项目(香蕉和樱桃)
  • 一个 Xamarin 项目(Dewberries)

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

我可以坐下来等待它加载 30 分钟或更长时间,但进度条会一直保持动画。我必须完全杀死 Visual Studio 才能阻止这种情况。

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

【问题讨论】:

    标签: visual-studio visual-studio-2017 sln-file


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        Visual Studio 解决方案文件中有许多不同的 guid。

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

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

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

        您似乎混合了新旧项目 guid,如 .net 项目系统 repo 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-00C04F79EFBC旧的 C# 项目 guid。

        9A19103F-16F7-4668-BE54-9A1E7A4F7556新的 C# 项目 guid。

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

        新的VS2017项目系统有bunch of benefits

        【讨论】:

          【解决方案4】:

          如果您检查解决方案 (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

          【讨论】:

          • 第一个 Guid (Project("{ <GUID> }")) 是 .net 项目类型,第二个 Guid (".csproj", "{ <GUID> }") 是唯一的项目标识符。您不应更改第一个,但可以将第二个设置为唯一 ID。
          • 有趣...如您所知,辅助 ID 都是唯一的。为什么 Xamarin 项目会与常规 .NET Framework 项目具有相同的 ID?如果它们表示不同的项目类型,它们是否应该不同?为什么VS会接受我随机生成的项目ID?所有有效的问题,我可能不会得到这些问题的任何答案。不过感谢您的意见,如果我再次遇到这个问题,我会记住这一点。
          • @seangwright 你有同样的问题吗?您是否能够通过更改辅助 ID 来解决它?
          • 我在 Microsoft 文档中没有找到对这些 GUID 的引用,但在 Code Project 上有一个很好的列表。
          • 查看 dotnet 项目系统 repo github.com/dotnet/project-system/blob/master/docs/…。进行了一次谷歌搜索,但它参考了新旧项目指南,您似乎混合了这些指南。
          猜你喜欢
          • 1970-01-01
          • 2013-12-05
          • 2016-11-08
          • 1970-01-01
          • 2018-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多