c# - Visual Studio 2019 intellisense 在每个不是 .NET 的命名空间下都显示红色曲线
问题描述
Visual Studio 2019 intellisense 在每个不是 .NET 的命名空间下都显示红色曲线。该项目构建并运行良好。如果我在 VS 2017 中打开解决方案,它可以正常打开,没有错误。
我已删除 .vs 文件夹。我怎么解决这个问题?
编辑:似乎共享项目已经丢失。如果我右键单击添加引用,则找不到其他项目。我尝试从解决方案中删除一个项目并重新添加它,但“共享项目”列表仍然是空的。我怀疑这与智能感知也找不到它们的问题有关。
如果我在此之后在 VS2017 中打开解决方案,一切正常,因此它似乎仅与 VS2019 相关。
解决方案
我们的解决方案记录在这里: https ://github.com/dotnet/roslyn/issues/40082
我能够找到此问题的根本原因,并为@rolandh 离线提供了解决方法。
标记我们团队的 VS 项目系统层专家 @jasonmalinowski 和一直在研究如何在 Roslyn 中正确报告 VS 特定诊断的 @tmat。让我扩展调查结果:
- 提供的解决方案有两个具有循环引用的项目
- 项目 P1 具有对项目 P2 的 ProjectReference,项目 P2 具有对 P2.dll 的元数据引用。后者通过我们的元数据到项目引用转换逻辑转换为项目引用。
- 以上配置导致我们的 VS 项目代码在尝试添加项目和元数据引用时在此处的 CheckNotContainsTransitiveReference 中抛出 InvalidOperationException。
- 上述异常似乎在调用堆栈的某个地方得到处理,因此没有用户可见的影响。但是,它会导致 P1 的项目状态损坏 - 最终没有文档、没有引用等。这会导致所有引用 P1 的项目中出现大量级联智能感知错误。
- 在命令行上构建项目/解决方案成功,因为 P1 对 P2.dll 的引用是不必要的。
- 不幸的是,上面的 InvalidOperationException 并没有转化为错误列表中的任何诊断,因此没有向用户提供有关幕后问题以及如何解决问题的信息。理想情况下,循环引用,或者实际上我们在工作区层抛出异常的任何此类项目系统异常,应该由 VS 层转换为错误列表中的诊断,因此它有助于用户修复他们的项目/解决方案。@jasonmalinowski 我们在跟踪此类工作时有任何问题吗?否则我可以提交一份。
基本上不知何故,我们在我们的项目中得到了一个循环引用(不可能通过 UI),这会导致智能感知引擎中的错误。
删除此循环引用解决了该问题。
推荐阅读
- java - Groovy/Jenkins - 如何在 http 请求正文中使用 for 循环
- excel - 创建空列表,然后将元素附加到该列表
- python - Python 使用 psycopg2 将 DateFrame 写入 AWS redshift
- c++ - 使用批处理文件对 desktop.ini 进行了更改,但文件夹图标不会更改
- zerobrane - 使用 ZeroBrane Studio 的远程调试功能在游戏中调试 LUA
- linux - 如何将常量添加到制表符分隔的文本linux文件中的特定列
- mysql - 为什么最小 id 的附加子查询可以使结果提高 10 倍?
- stack - BigNum snd 堆栈溢出
- php - 如何在 JSON 中有一个列表和对象?
- python - 连接池 - SQLAlchemy & Flask