Visual Studio 2015或2017显示IntelliSense错误,但解决方案编译

Ash*_*Ash 117 intellisense visual-studio visual-studio-2015

我们目前正在评估新的Visual Studio 2015,并遇到了IntelliSense的一个奇怪问题.当我使用新工作室编译我们的主要解决方案时,构建成功,但是仍然显示了6个错误.

我发现这不是一个真正的错误,而只是一个智能感知错误.代码肯定是正确的,一切都编译成功.但是代码标记为红色,错误显示在错误列表中.

所有6个错误都有相同的来源.这是一个简单的构造函数调用.很奇怪,但也有一些完全相同的构造函数没有任何错误.

错误消息:

Code: CS1729
Message: '<the class>' does not contain a constructor that takes that many arguments.
Project: <the project name>
File: <the path to the file>
Run Code Online (Sandbox Code Playgroud)

新工作室安装在新安装的Windows 7上,没有任何传统软件(没有VS13).

我已经尝试清除缓存,删除suo文件,删除bin和obj目录,清理并重建解决方案等但没有任何效果.

任何人都可以向我解释这种行为吗?

Kar*_*ral 191

我有成千上万的intellisense错误和0构建错误.删除.suo文件并重新启动VS智能感知错误消失后.

Suo 文件位于相对于源: .vs\SolutionName\v14\.suo

评论:注意这*.suo是一个隐藏文件.

编辑:根据评论,VS2017有相同的问题,所以你可以使用类似的解决方案:删除.vs\SolutionName\v15\.suo

  • 只是注意:在某些情况下可能会隐藏`*.suo`文件.因此,您需要从Windows资源管理器启用"查看隐藏文件"选项. (7认同)
  • 杀死.suo对我没有任何影响,但是删除bin和obj dir然后重建解决方案就可以了. (5认同)

Gui*_*tos 54

迁移项目也遇到此问题,因此我引用了Microsoft.CSharp dll.在某些项目中,我需要删除并再次添加项目中的Reference.

  • 当团队成员向解决方案添加新项目并将某些cs文件从现有项目迁移到新项目时,我必须这样做.当我得到最新消息时,我看到了许多错误,但我可以编译并运行.从冒犯的项目中删除并重新添加对新项目的引用对我有用. (3认同)
  • 解决方案可以编译,但是在某些文件中显示弯曲的错误。仅在调试中,“发布”中没有显示错误。删除了Microsoft.CSharp,错误消失了,谢谢! (2认同)

Nar*_*ren 19

在Visual Studio 2017 ASP.Net核心项目中遇到类似的问题.以下步骤为我做了诀窍

  1. 执行清洁解决方案
  2. 关闭VS.
  3. 删除.suo文件和删除bin/obj目录
  4. 重新打开VS.


HgC*_*der 10

与其他人类似的问题,但分辨率不同.发布以防我可以帮助别人.

运行Visual Studio 2017 15.5.2.我使用Git并经常切换分支.几个星期前,我开始让编辑向我显示错误(所有类型都与它找不到的类型相关,即使引用有效).编译工作得很好.我在VS 2017 15.6 Preview(2018年1月6日)中确认了同样的问题.我会尝试删除缓存,SUO文件或bin/obj文件夹,没有任何影响.起初它似乎工作.重新打开Visual Studio,一切都会很好看.使用"重建解决方案",将返回IntelliSense错误.我甚至尝试卸载/重新安装Visual Studio.

我在两台机器上遇到了同样的问题,两台机器都使用相同版本的Visual Studio.

通过查看有关缺失类型的错误,它们似乎都来自两个引用的项目.其中一个引用是解决方案中几乎所有其他项目使用的共享项目,但其中一个项目是一个没有很多引用的小项目.事实上,我的大型共享项目也引用了小项目.在Visual Studio中,我卸载了小项目并重新加载它.错误消失了!他们的错误没有回到Rebuild Solution上.

然后我切换了Git分支,错误全部回来了.幸运的是,我重复了上述卸载/重新加载小项目的步骤,错误消失了.

每次我切换Git分支时,错误都会回来,直到我重复这个过程.对于我卸载/重新加载的较小项目,Git分支之间没有任何变化.不清楚为什么这个序列正在解决我的问题.


Ste*_*ein 7

也有这个问题(标题,而不是具体的错误信息),以及编辑器中的波浪线.第一个波浪线在第一个#include语句下,它命名一个预编译的头.Intellisense无法包含预编译的头,但不会将其列为错误; 相反,它会在文件的下方列出错误,代码(非常合理地)依赖于预编译头中的声明.

Intellisense在我的环境中找不到预编译头的原因是名为的头不是实际文件.只要正确配置了预编译的头设置,它就不必在我使用的任何其他VC或gcc版本中,也不必在2015编译器中.显然不再是Intellisense了.我不完全确定它在2013年有所不同,也许我从未注意到.

在不太可能的情况下,这将是此处报告的问题,解决方案很简单:使用#include指令中指定的预编译头的伪装名创建一个小文件,并让该文件包含预编译头的实际名称.

如果你想知道...为什么'#include'语句中的预编译头名称与预编译头文件的实际文件名之间存在区别?正是因为它保证了正确配置了预编译的头设置.只要预编译头是"#included",就不会包含任何文件.要么读取实际标头的实际预编译(二进制)版本,要么编译失败.显然,缺点是它会让读取代码的感到困惑,而不仅仅是智能感知.