如何抑制某些文件的 Intellisense 错误?
Posted
技术标签:
【中文标题】如何抑制某些文件的 Intellisense 错误?【英文标题】:How can I suppress Intellisense errors for certain files? 【发布时间】:2015-09-21 13:56:17 【问题描述】:Visual Studio 2015 提供了在显示常规构建错误的同一窗口中显示 Intellisense 错误的选项。我喜欢它,因为我什至不需要构建来查看我的代码语法是否正确。
但是,该窗口还显示一个误报错误,该错误似乎与 Intellisense 错误有关。有什么方法可以抑制特定代码区域或整个文件的智能感知错误?
【问题讨论】:
在错误列表视图中,工具栏中有一个组合框,您可以在其中选择要在其中显示的错误类型,构建、智能感知或两者兼有(智能感知在 2015 年在我的边)。 我知道,但我想查看 Intellisense 错误。 Intellisense 错误总体上效果很好。我只是想摆脱这个错误。 那么抱歉,但即使在 VS2015 中,我也不认为可以部分禁用智能感知。在以前的版本中是不可能的。不过,有一些解决方法可能适用于您的情况,也可能不适用,例如卸载相关项目。 【参考方案1】:老问题,我知道,但我刚刚对 Visual Studio 2019 / IntelliSense 提出了类似的投诉,并找到了解决方案。
我的具体示例是 C++,它与可变长度数组的使用有关。 Clang 支持/编译它们,我可以通过添加 -Wno-vla
选项 (Properties -> C/C++ -> Command Line -> Additional Options
) 来抑制构建警告。
但是,IntelliSense 会忽略“-Wno-vla”,将 VLA 视为错误,而不是警告。因此,在代码及其错误列表中出现红色曲线:E0028 expression must have a constant value
(此错误编号 28 在下面很重要)
关键是要记住 IntelliSense 使用不同的编译器前端,因此可能与您选择的构建编译器和选项对什么是“正确的”有不同的想法。前端从EDG 获得许可,幸运的是,他们在此处记录了它的一些操作,包括命令行选项、pragma 等:C++ Front End PDF
我不知道如何将他们的命令行选项专门用于他们的前端,这似乎从项目中提取了它的选项,与构建编译器使用的相同......并且它窒息了这些选项,尤其是那些希望在空格后面有参数的人(例如 --diag_suppress 28
从来没有工作过)。
然而我可以开始工作的是前端特定的编译指示!所以这需要少量的不可移植的代码。具体来说,我将以下内容放入我的***(“每个人都包含”)头文件之一,效果很好:
#ifdef __INTELLISENSE__
#pragma diag_suppress 28
#endif
没有__INTELLISENSE__
子句,你也可以这样做:#pragma clang diagnostic ignored "-Wunknown-pragmas"
【讨论】:
不错。您可能希望在有问题的代码段之后使用“#pragma diag_default 28”重新启用错误【参考方案2】:你找到答案了吗?您可以通过在引发错误之前的代码行中编写以下代码来做到这一点
#pragma warning disable XXXX
其中 XXXX 是不带“CS”的错误代码
或者您可以尝试这些步骤来禁止 Visual C# 或 F# 的特定警告
-
在解决方案资源管理器中,选择要禁止显示警告的项目。
在菜单栏上,选择“视图”、“属性页”。
选择构建页面。
在抑制警告框中,指定要抑制的警告的错误代码,用分号分隔,然后重新生成解决方案。
取自这里https://msdn.microsoft.com/en-us/library/jj715718.aspx
请注意,这里提到的是警告而不是错误,但对我来说,如果我选择在错误列表窗口中显示已抑制的错误,它们就会被列为错误。您可能需要在“错误列表”窗口中启用此列。
【讨论】:
这是否适用于构建警告或智能感知警告?还是两者兼而有之?【参考方案3】:使用 StyleCop 时,您可以执行以下操作:
[SuppressMessage("Rule Category", "Rule Id", "Justification")]
例子:
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules",
"SA1300:ElementMustBeginWithUpperCaseLetter",
Justification = "This field is intentionally lowercase")]
【讨论】:
以上是关于如何抑制某些文件的 Intellisense 错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Visual Studio 编译器无法找到某些头文件而 intellisense 可以?
IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]