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

类型名

AvoidCallingProblematicMethods

CheckId

CA2001

类别

Microsoft.Reliability

是否重大更改

非重大更改

原因

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

规则说明

避免进行不必要和具有潜在危险的方法调用。

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

方法

说明

GC.Collect

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

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 (苏珊娜 Cook) 的 .NET CLR 注释博客发表在 MSDN 网站上的 LoadFile vs. LoadFrom 文章和 选择一约束上下文 来查看有关加载程序集的方法的信息。

CoSetProxyBlanket (Ole32)

CoInitializeSecurity (Ole32)

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

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

如何解决冲突

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

何时禁止显示警告

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

请参见

其他资源

可靠性警告