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

Posted

技术标签:

【中文标题】Visual Studio 2015 或 2017 显示 IntelliSense 错误,但解决方案编译【英文标题】:Visual Studio 2015 or 2017 shows IntelliSense errors but solution compiles 【发布时间】:2015-11-03 18:55:41 【问题描述】:

我们目前正在评估新的 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>

新工作室安装在新安装的 Windows 7 上,没有任何旧版软件(无 VS13)。

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

谁能向我解释这种行为?

【问题讨论】:

intellisense 使用的解析器与实际编译代码时使用的编译器不同。 这也发生在 VS 2013 上。可能是 VS 还没有完成对整个代码库的索引。如果它按预期编译和工作,我不会关注它。 @chill 在 VS2015 中它应该是同一个解析器,是 Roslyn 的一部分。 你能创建一个重现问题的小项目吗?如果是的话,你能发布代码吗? 类是部分的,还是它的任何部分在编译时生成? 【参考方案1】:

我有数千个智能感知错误和 0 个构建错误。删除.suo 文件并重新启动VS intellisense 后错误消失了。

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

根据评论:注意*.suo是隐藏文件。

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

【讨论】:

请注意:*.suo 文件在某些​​情况下可能会被隐藏。因此,您需要从 Windows 资源管理器中启用 View Hidden files 选项。 杀死 .suo 对我没有影响,但是删除 bin 和 obj 目录然后重建解决方案就可以了。 删除 .suo 文件并没有解决我的问题(在 VS2015 中)我在 javascript 中得到了虚假的红色波浪,它引用了来自代码隐藏的属性:&lt;%=Foo%&gt; 说变量没有声明,但一切都在运行时工作。 我不是 100% 确定,但这也可以修复我在使用 XAML 时遇到的无效标记错误 找到 . -name "*suo" -exec rm -rf \;【参考方案2】:

迁移的项目也有这个问题,所以我引用了 Microsoft.CSharp dll。在某些项目中,我需要删除并再次添加项目中的引用。

【讨论】:

当团队成员向解决方案添加一个新项目并将一些 cs 文件从现有项目迁移到新项目时,我不得不这样做。当我得到最新的时候,我看到了很多错误,但我可以编译和运行。从被冒犯的项目中删除并重新添加对新项目的引用对我有用。 与比尔描述的情况完全相同。一些课程被转移到一个新项目。从源代码管理导入新项目引用时,Visual Studio 似乎没有更新它的 Intellisense 缓存。手动重新输入引用强制 VS 这样做。 解决方案编译,但在某些文件中显示波浪形错误。 “发布”中没有显示错误,只是在调试中。删除了 Microsoft.CSharp,错误消失了,谢谢! @Michael 感谢您的提示。我有完全相同的问题。 Release 中没有错误,但 Debug 中有很多错误。 如果提到的类是你自己的代码,你可以排除然后包含包含该类的文件。它应该触发 VS 更新 IntelliSense。 #awfulbug【参考方案3】:

在 Visual Studio 2017 ASP.Net Core 项目中遇到类似问题。以下步骤对我有用

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

【讨论】:

这行得通,但时不时地做这样一件乏味的事。在发布模式下构建时,我总是遇到这个问题。奇怪 VS 自己想不通。 删除 obj 目录有所不同并使其正常工作(因为 bin 已经为空)。【参考方案4】:

与其他类似的问题,但不同的解决方案。发帖以防我可以帮助其他人。

运行 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 中,我卸载了小项目并重新加载了它。错误消失了!他们的错误没有出现在重建解决方案上。

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

每次我切换 Git 分支时,错误都会再次出现,直到我重复该过程。对于我卸载/重新加载的较小项目,Git 分支之间的更改为零。不清楚为什么该序列解决了我的问题。

【讨论】:

基于此,我卸载了三个“测试”或“架构”相关项目,然后卸载并重新加载了 Intellisense 错误填充项目 (WPF)。 0 个错误中的 0 个错误 :) +1 的离散细节导致我尝试类似于您的 HgCoder! 使用 VS 2017 15.9.9。使用 Git。使用 R#。我也经常切换分支。我的错误确实都是 IntelliSense。我注意到项目的卸载导致“项目”列(在错误列表选项卡中)转到 。所以,它似乎确实有点踢它。卸载项目似乎也对我有用。清洁解决方案 + 重建解决方案最终产生 0 个错误。【参考方案5】:

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

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

如果这可能是此处报告的问题,解决方案很简单:使用 #include 指令中指定的预编译头的假名创建一个小文件,并让该文件包含实际预编译头文件的名称。

如果您想知道...为什么'#include' 语句中的预编译头文件名与预编译头文件的实际文件名之间存在这种区别?正是因为它保证正确配置了预编译的头文件设置。只要预编译的头文件是“#included”,就没有可以包含的文件。读取实际标头的实际预编译(二进制)版本,或者编译失败。显然,一个缺点是它会混淆人们阅读代码,而不仅仅是智能感知。

【讨论】:

【参考方案6】:

Visual Studio 2017 我已从位置 .vs\SolutionName\v15.suo 中删除了“.suo”文件 然后重新启动 Visual Studio。这对我有用。

【讨论】:

【参考方案7】:

今天我在使用 MSVC++ 2015 时遇到了类似的问题。我几乎放弃并决定在没有 IDE 提示的情况下继续进行,但突然间我注意到我遇到问题的项目的 stdafx.h 不包含任何标准库头文件。我推测在 stdafx.h 中包含项目中使用的所有标准头文件可能会提高编译速度,但这样做也可以修复 Intellisense 错误。

【讨论】:

【参考方案8】:

在 Visual Studio 2019 中,当项目中安装了 NuGet 包时,问题是使用 Git 更改分支。我做了什么来解决这个问题:

    清洁解决方案 关闭 Visual Studio 删除包文件夹 打开 Visual Studio 转到包管理器 恢复所有包 重新编译 如果缺少 roslyn,请关闭并打开 Visual Studio,然后重新编译。

【讨论】:

【参考方案9】:

我在其他包含目录中有多个 stdfax.h。确保您想要的 stdafx.h 在您的路径中排在首位。

【讨论】:

【参考方案10】:

我在使用不同的 Visual Studio 版本时遇到了类似的问题。

删除 .suo 或 .vs 文件夹对我没有帮助。

我的解决方案是,我激活了 Extension StopOnFirstBuildError。在构建菜单中关闭“Stop build on first error”后,完全构建解决方案后,Intellisense 显示的错误消失了。

【讨论】:

【参考方案11】:

我仅在发布网站时才看到智能搜索错误。 (ASP/C# 网站,VS 2017)。他们破坏了发布。网站在本地运行良好。

通过取消选中预编译设置来清除错误,并且发布正常。 发布 -> 设置 -> 文件发布选项 -> 发布期间预编译

【讨论】:

【参考方案12】:

我在引用另一个项目时遇到了这个问题。删除和重新添加项目引用对我有用。

【讨论】:

以上是关于Visual Studio 2015 或 2017 显示 IntelliSense 错误,但解决方案编译的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2015 中打开 Visual Studio 2017 项目

Visual Studio 2017 安装中断 Visual Studio 2015 ASP.NET Core 项目

无法构建或清理 Visual Studio 2015 解决方案(拒绝访问)

从 Visual Studio 2017 RC 降级到 Visual Studio 2015 的解决方案

Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015

如何在 Visual Studio 2015 中添加库、头文件