禁止对 Visual Studio 中的所有项目发出警告

Posted

技术标签:

【中文标题】禁止对 Visual Studio 中的所有项目发出警告【英文标题】:Suppress a warning for all projects in Visual Studio 【发布时间】:2018-05-17 19:42:56 【问题描述】:

我已经看到了一些答案,这些答案显示了如何禁止针对特定代码行或特定项目的警告。我不想那样。

我想禁止对我的所有项目发出特定警告。

(如果重要,警告是 IDE0044。我使用的是 C#。)

【问题讨论】:

您可以在解决方案目录中创建一个源文件,其中包含[SuppressMessage] 属性。然后使用“添加现有文件...添加为链接”将其包含在每个项目中。 @RonBeyer 这不是我想要的,但感谢您的解决方法。 【参考方案1】:

Visual Studio 2017 (15.7.1) 的最新更新现在提供了一个选项。在Tools->Options 菜单下,选择TextEditor->C#->Code Style->General 选项卡。在Field preferences 下,有一个Prefer readonly 选项。将其设置为No

如果您想在代码旁边检查此首选项,您还可以设置一个 editorconfig 设置,因此使用您的代码的其他人不会收到警告,但这必须在每个解决方案中完成基础。您将设置的 editorconfig 值是:

 dotnet_style_readonly_field = false:none

【讨论】:

【参考方案2】:

您可以使用System.Diagnostics.CodeAnalysis 命名空间下的SuppressMessage 属性,例如

[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "args")]

正如您编辑的那样,我想为我的所有项目禁止特定警告

对于整个项目明智的 AFAIK,您不能这样做。但如果有帮助,请检查链接的帖子一次

How to suppress code analysis messages for all type members?

【讨论】:

谢谢。但这仅适用于一个项目。如果我错了,请纠正我。 (不过,我不是反对者。) @ispiro 是的,正如你所说的特定的代码行有关更多信息,请参阅链接文档 @Rahul 他确实说过“特定的代码行”,但你的上下文错误。 @mxmissile,并不完全像 OP 所说的那样如何抑制针对特定代码行或特定项目的警告 谢谢。但是@mxmissile 是对的。我的意思是我已经看过那些,那不是我要找的。我将问题编辑得更清楚一些。【参考方案3】:

要禁止所有项目的警告,您需要在***目录中创建一个.editorconfig 文件。 例如,我的主干中有我的,我将其提交到源代码管理,以便我的同事共享相同的设置。

此文件中的设置适用于主干和子文件夹中的所有项目,除非被文件夹树下方的另一个 .editorconfig 文件覆盖,例如您可能在具有不同设置的子文件夹中有一个项目特定的 EditorConfig 文件。详情请见File hierarchy and precedence。

创建 EditorConfig 文件

如果您只想更改一项特定设置,则可以使用文本编辑器。但是,Visual Studio 可以为您创建一个具有合理默认值的 .editorconfig 文件。来自MSDN:

创建一个新项目

从菜单栏中,选择项目 > 添加新项目;或按 Ctrl+Shift+A

选择editorconfig File (.NET) 模板以添加一个预先填充有默认 .NET 代码样式、格式和命名约定的 EditorConfig 文件

可选择删除项目 - 我们并不真正需要它

Visual Studio 2019 - 从当前设置创建 EditorConfig 文件

在 Visual Studio 2019 中,您可以改为 create an EditorConfig file from your current settings。只需在Text Editor > C# > Code Style > General下的选项对话框中单击以下按钮:

如果您在文本编辑器中创建,您可能需要在文件顶部添加此内容,并根据需要进行调整:

# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

# C# files
[*.cs]

在编辑器配置文件中禁用 IDE0044

要专门禁用 IDE0044,请在 .editorconfig 文件中添加或更改以下设置:

dotnet_style_readonly_field = false:none

(在 Visual Studio 2019 中,您可以在 选项 中将 TextEditor-> C# -> Code Style-> General 下的 Prefer readonly 选项设置为 No,然后按上面详述的 Generate .editorconfig file from settings 按钮。

【讨论】:

【参考方案4】:

您可以尝试使用Directory.Build.props 添加NoWarn 属性来获得特定警告。不过我还没有验证。

正如另一个答案中所说,最好解决根本原因而不是忽略它。

【讨论】:

【参考方案5】:

我想在 Stephen 的帖子中补充一点,如果没有指定我想应用规则的文件,他使用 .editorconfig 文件的解决方案对我不起作用。例如,假设我想对所有测试文件应用一条规则,并且我遵循以“Tests.cs”结尾的命名约定,我设法通过使用忽略这些文件中的 CA1707 规则以下规则:

[*Tests.cs]
dotnet_diagnostics.CA1707.severity = none

关于我的回答here的更多信息

【讨论】:

我没有发布完整的文件,因为我用 VS 制作了它,而且它很大,但我确实在顶部有类似的东西 ([*.cs])。事实证明这很重要!对于手动制作配置文件的人,我已将信息添加到我的答案中。感谢您的反馈。【参考方案6】:

IDE0044 是“添加只读修饰符”,那为什么不直接添加修饰符呢?

警告告诉你你做错了什么,但应用程序会编译。

在理想世界中最好是零警告。

【讨论】:

因为在某些情况下 readonly 不是最好的修饰符(例如,在数组上,因为即使该特定引用不能修改数组也可以修改)。此外,在某些情况下,重新分配字段是完全合法且可取的,并且仍然会报告 IDE0044。 我不同意。即使在数组上,设置为只读也意味着您不会摆脱整个数组。如果得到这个警告,它告诉你这是完全安全的。关于数组的变化。虽然列表数组在类中很棒,但您应该只返回一个只读集合来保护您的数组 当然,如果您还采用使每个字段访问成为属性访问的方法。也有非数组原因来抑制消息;无论您是否同意它们,概念都是样式警告,而不是编译器警告。这是 IDExxxx 警告,而不是 CSxxxx 警告。你可能有理由不同意我对其必要性的争论,我也可能有理由不同意你对其普遍适用性的看法。人们可以合理地不同意,并且合理地希望禁用警告;这个问题是关于这样做是他们自己的政策问题。 在一个非理想的,即真实的世界中,很容易被一个带有近 2k 警告的项目卡住,主要是未使用的变量等。我不会修复所有这些,他们可以安全地被压制。 很多人使用 VS 进行统一 c# 编程。您可以在其中添加一个 SerializeField 属性来显示和修改 VS 无法检测到的检查器中的变量,这个警告真的很烦人。

以上是关于禁止对 Visual Studio 中的所有项目发出警告的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2005 中禁止警告 4200?

Visual Studio 数据库项目:包括对所有对象的“如果存在”检查

Visual Studio中怎样的配置只对单个项目(工程)有效?怎样的配置对所有项目(工程)都有效?

Visual Studio 未显示解决方案中的所有项目

Visual Studio - 共享资源文件

从 Visual Studio 项目中的项目中删除所有未使用的引用