CA2001:避免调用有问题的方法

类型名

AvoidCallingProblematicMethods

CheckId

CA2001

类别

Microsoft.Reliability

是否重大更改

非重大更改

原因

某个成员调用可能存在危险或有问题的方法。

规则说明

避免进行不必要的、可能存在危险的方法调用。

当某个成员调用下列方法之一时,将与此规则冲突。

方法

说明

GC.Collect

调用 GC.Collect 可能会严重影响应用程序性能,基本上不需要进行该操作。 有关更多信息,请参见 MSDN 上的 Rico Mariani's Performance Tidbits(Rico Mariani 关于性能问题的见解)博客项。

Thread.Resume

Thread.Suspend

Thread.Suspend 和 Thread.Resume 已被否决,这是因它们不可预知的行为。 使用 System.Threading 命名空间中的其他类(例如 Monitor、[T:System.Threading.Mutex,]、MutexSemaphore)以同步线程或保护资源。

SafeHandle.DangerousGetHandle

DangerousGetHandle 方法会带来安全风险,因为它可以返回无效的句柄。 有关安全使用 DangerousGetHandle 方法的更多信息,请参见 DangerousAddRefDangerousRelease 方法。

Assembly.LoadFrom

Assembly.LoadFile

Assembly.LoadWithPartialName

这些方法可以从意外的位置加载程序集。 例如,参见 Suzanne Cook 的 .NET CLR Notes 博客文章 LoadFile vs. LoadFrom(LoadFile 与 LoadFrom)和 MSDN 网站上的 Choosing a Binding Context(选择绑定上下文),以了解加载程序集方法的信息。

CoSetProxyBlanket (Ole32)

CoInitializeSecurity (Ole32)

当用户代码开始在托管进程中执行时,由于太迟而无法可靠地调用 CoSetProxyBlanket。 公共语言运行时 (CLR) 采取初始化操作,这些操作可能会阻止用户 P/Invoke 取得成功。

如果确实需要为托管应用程序调用 CoSetProxyBlanket,建议您使用本机代码 (C++) 可执行文件启动该进程,在本机代码中调用 CoSetProxyBlanket,然后在进程中启动您的托管代码应用程序。 (确保指定运行时版本号。)

如何解决冲突

若要修复与此规则的冲突,请移除或更换对危险或有问题方法的调用。

何时禁止显示警告

仅当没有方法可替代有问题的方法时,才禁止该规则的消息。

请参见

其他资源

可靠性警告