【问题标题】:Disable a compiler warning which is not in the rule set禁用不在规则集中的编译器警告
【发布时间】:2014-02-12 07:48:35
【问题描述】:

我的 C# 应用程序使用代码分析规则集 Microsoft Managed Recommended Rules。我正在使用一些过时的类,所以我收到警告 CS0618。 (我无法替换过时的类,因为它是在 3rd 方 API 中定义的,所以我必须使用它)

我想通过编辑默认规则集并将其保存为新名称来禁用此警告,但 CS0618 规则不属于此规则集。

所以我有两个问题:

  • 为什么编译器会检查 CS0618,尽管它不是所选规则集的一部分?
  • 如何禁用每个项目/每个解决方案而不是每个地方的警告?

对于那些好奇为什么我不能简单地修复编译器警告的人: 见Refactoring XmlSchemaCollection, XmlValidatingReader and ValidationType.XDR to get rid of compiler warning

【问题讨论】:

  • 代码分析规则/警告以CA开头。 C Sharp 警告/错误以CS 开头。

标签: c# compiler-warnings suppress-warnings


【解决方案1】:

CS0168 不是代码分析的一部分 - 它是一个简单的 C# 编译器警告。这与以后的代码分析无关。

要在项目属性中禁用它,请进入项目属性、构建选项卡、错误和警告部分、抑制警告,然后指定 0168(不是 CS0168)。

【讨论】:

  • 问题 1) 我需要使用基于 XDR 模式的 XML。我已经尝试过应用 Visual Studio 提供的每一个建议来用其他东西替换它,但我从未设法摆脱过时的模式。我认为那是因为 XDR 通常已经过时,无论您使用哪个类。如果您知道在没有过时类的情况下使用 XDR 的解决方案,我很高兴提出一个新问题 - 甚至为此提供赏金。
  • @ThomasW.:对XDR一无所知,你的意思是这是生成的代码,你不控制生成部分吗? (不清楚是哪个“过时的类”导致了问题,或者为什么需要重新编译它。)
  • XDR 是 Microsoft XML-Data Reduced。使用 XDR 的过时类是 System.Xml.Schema.XmlSchemaCollection、System.Xml.XmlValidatingReader 和枚举 System.Xml.ValidationType.XDR
  • @ThomasW.: 但是你不需要编译那些类,是吗?什么源代码导致了这个警告,为什么你不能修复它?
  • 我已经发布了我的问题:stackoverflow.com/questions/21723218/…
【解决方案2】:

我不敢相信我会在这里与 Skeet 对抗,但是......

我过去曾有过这种情况,我有一个包装了一堆 Oracle Dll 调用的 DataAccess 类。不幸的是,MS 淘汰了 Oracle 类,并且发出了警告。我不喜欢全面禁止过时警告的想法,因为它会抑制我们自己代码中的其他过时,但我们没有时间解决这个问题(该类在不同的很多地方都使用过应用程序)。

我所做的是使用#pragma 禁用该类的警告:

#pragma warning disable 612, 618

public class MyWrapper
{
}

#pragma warning enable 612, 618

当然,如果所有对过时类的调用都是通过代码中的一个点进行的,那么这种方法效果最好,否则你需要在整个地方设置 #pragma 标志。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多