2

Visual Studio 2019 intellisense 在每个不是 .NET 的命名空间下都显示红色曲线。该项目构建并运行良好。如果我在 VS 2017 中打开解决方案,它可以正常打开,没有错误。

我已删除 .vs 文件夹。我怎么解决这个问题?

编辑:似乎共享项目已经丢失。如果我右键单击添加引用,则找不到其他项目。我尝试从解决方案中删除一个项目并重新添加它,但“共享项目”列表仍然是空的。我怀疑这与智能感知也找不到它们的问题有关。

如果我在此之后在 VS2017 中打开解决方案,一切正常,因此它似乎仅与 VS2019 相关。

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

0

我们的解决方案记录在这里: https ://github.com/dotnet/roslyn/issues/40082

我能够找到此问题的根本原因,并为@rolandh 离线提供了解决方法。

标记我们团队的 VS 项目系统层专家 @jasonmalinowski 和一直在研究如何在 Roslyn 中正确报告 VS 特定诊断的 @tmat。让我扩展调查结果:

  1. 提供的解决方案有两个具有循环引用的项目
    • 项目 P1 具有对项目 P2 的 ProjectReference,项目 P2 具有对 P2.dll 的元数据引用。后者通过我们的元数据到项目引用转换逻辑转换为项目引用。
  2. 以上配置导致我们的 VS 项目代码在尝试添加项目和元数据引用时在此处的 CheckNotContainsTransitiveReference 中抛出 InvalidOperationException。
  3. 上述异常似乎在调用堆栈的某个地方得到处理,因此没有用户可见的影响。但是,它会导致 P1 的项目状态损坏 - 最终没有文档、没有引用等。这会导致所有引用 P1 的项目中出现大量级联智能感知错误。
  4. 在命令行上构建项目/解决方案成功,因为 P1 对 P2.dll 的引用是不必要的。
  5. 不幸的是,上面的 InvalidOperationException 并没有转化为错误列表中的任何诊断,因此没有向用户提供有关幕后问题以及如何解决问题的信息。理想情况下,循环引用,或者实际上我们在工作区层抛出异常的任何此类项目系统异常,应该由 VS 层转换为错误列表中的诊断,因此它有助于用户修复他们的项目/解决方案。@jasonmalinowski 我们在跟踪此类工作时有任何问题吗?否则我可以提交一份。

基本上不知何故,我们在我们的项目中得到了一个循环引用(不可能通过 UI),这会导致智能感知引擎中的错误。

删除此循环引用解决了该问题。

于 2019-12-06T00:09:01.240 回答