防止 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()
{
}
}
我有一个 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()
{
}
}