CA2001:避免调用有问题的方法
类型名 |
AvoidCallingProblematicMethods |
CheckId |
CA2001 |
类别 |
Microsoft.Reliability |
是否重大更改 |
非重大更改 |
原因
某个成员调用可能存在危险或有问题的方法。
规则说明
避免进行不必要的、可能存在危险的方法调用。
当某个成员调用下列方法之一时,将与此规则冲突。
方法 |
说明 |
---|---|
调用 GC.Collect 可能会严重影响应用程序性能,基本上不需要进行该操作。 有关更多信息,请参见 MSDN 上的 Rico Mariani's Performance Tidbits(Rico Mariani 关于性能问题的见解)博客项。 |
|
Thread.Suspend 和 Thread.Resume 已被否决,这是因它们不可预知的行为。 使用 System.Threading 命名空间中的其他类(例如 Monitor、[T:System.Threading.Mutex,]、Mutex 和 Semaphore)以同步线程或保护资源。 |
|
DangerousGetHandle 方法会带来安全风险,因为它可以返回无效的句柄。 有关安全使用 DangerousGetHandle 方法的更多信息,请参见 DangerousAddRef 和 DangerousRelease 方法。 |
|
这些方法可以从意外的位置加载程序集。 例如,参见 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,然后在进程中启动您的托管代码应用程序。 (确保指定运行时版本号。) |
如何解决冲突
若要修复与此规则的冲突,请移除或更换对危险或有问题方法的调用。
何时禁止显示警告
仅当没有方法可替代有问题的方法时,才禁止该规则的消息。