禁止对 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 数据库项目:包括对所有对象的“如果存在”检查