如何抑制某些文件的 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 疑难解答”,获得进一步的帮助]

PHP 通知抑制;只有某些情况/方法

PowerShell:如果“mkdir”命令的文件已经存在,我该如何抑制错误?

如何在以下批处理文件代码中抑制错误流

为啥我会收到 IntelliSense 错误,如何修复或隐藏它们?