防止 ObsoleteAttribute 警告冒泡调用堆栈

Prevent ObsoleteAttribute warning bubbling up call stack

我有一个 class 使用已弃用的程序集 (System.Data.OracleClient)。在编译时,这会产生一条消息 'MethodName()' is obsolete: 'OracleConnection has been deprecated. 我们无法替换此程序集,我们现在正尝试删除编译时生成的所有警告,以便我们清楚新警告。

似乎每当我尝试使用 [System.ObsoleteAttribute("OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)] 抑制警告时,警告就会被推上堆栈到调用方法。

在下面的示例 class 中,只有方法 E() 使用了已弃用的程序集,但我在方法 A() 中收到警告,因为它是堆栈中没有 ObsoleteAttribute。如果我从 C() 中删除该属性,则警告会被向下推到堆栈 C().

public class OracleCaller
{
    public void A()
    {
        C();
    }
    [System.ObsoleteAttribute("OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)]
    private void C()
    {
        D();
    }

    [System.ObsoleteAttribute("OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)]
    private void D()
    {
        E();
    }
    [System.ObsoleteAttribute("OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260", false)]
    private void E()
    {
        System.Data.OracleClient.OracleCommand c = new System.Data.OracleClient.OracleCommand();
    }
}

在我的应用程序中,这将导致我必须一直使用此属性装饰方法,一直到 UI,这似乎毫无意义。

我可以绕过这个问题,以便只抑制调用程序集的方法中的警告吗?

谢谢

Can I get round this so that I only suppress the warning in the method where the assembly is called?

是 - 通过使用 C# 中抑制警告的正常方式 - 使用 #pragma warning disable.

这是一个例子:

using System;

public class Test
{    
    static void Main()
    {
#pragma warning disable 0618       
        ObsoleteMethod();
#pragma warning restore 0618        
    }

    [Obsolete("Don't call me")]
    static void ObsoleteMethod()
    {
    }
}