CA2001: 문제가 있는 메서드는 호출하지 마십시오.
TypeName |
AvoidCallingProblematicMethods |
CheckId |
CA2001 |
범주 |
Microsoft.Reliability |
변경 수준 |
주요 변경 아님 |
원인
멤버에서 잠재적 위험이나 문제가 있는 메서드를 호출합니다.
규칙 설명
불필요하고 잠재적 위험이 있는 메서드는 호출하지 마십시오.
이 규칙은 멤버가 다음 메서드 중 하나를 호출할 때 위반이 발생합니다.
메서드 |
설명 |
---|---|
GC.Collect를 호출하면 응용 프로그램 성능에 상당한 영향을 미칠 수 있으며 거의 필요하지 않습니다.자세한 내용은 MSDN의 Rico Mariani's Performance Tidbits 블로그 항목을 참조하십시오. |
|
Thread.Suspend 및 Thread.Resume은 예기치 않은 동작으로 인해 사용되지 않습니다.스레드를 동기화하거나 리소스를 보호하려면 Monitor, [T:System.Threading.Mutex,]Mutex, Semaphore 등 System.Threading 네임스페이스의 다른 클래스를 사용하십시오. |
|
DangerousGetHandle 메서드는 유효하지 않은 핸들을 반환할 수 있기 때문에 보안 위험이 발생할 수 있습니다.DangerousGetHandle 메서드를 안전하게 사용하는 방법에 대한 자세한 내용은 DangerousAddRef 및 DangerousRelease 메서드를 참조하십시오. |
|
이러한 메서드는 예기치 않은 위치에서 어셈블리를 로드할 수 있습니다.예를 들어, 어셈블리를 로드하는 메서드에 대한 자세한 내용은 Suzanne Cook의 .NET CLR Notes 블로그 게시물 LoadFile vs. LoadFrom 및 MSDN 웹 사이트의 Choosing a Binding Context를 참조하십시오. |
|
CoSetProxyBlanket (Ole32) CoInitializeSecurity (Ole32) |
사용자 코드가 관리 프로세스에서 실행되는 시점이 되면 CoSetProxyBlanket을 안정적으로 호출하기에는 너무 늦습니다.CLR(Common Language Runtime)은 사용자 P/Invoke의 성공을 방해할 수 있는 초기화 작업을 수행합니다. 관리되는 응용 프로그램에 대해 CoSetProxyBlanket을 호출해야 하는 경우에는 네이티브 코드(C++) 실행 파일을 사용하여 프로세스를 시작하고, 네이티브 코드에서 CoSetProxyBlanket을 호출한 다음, 프로세스에서 관리 코드 응용 프로그램을 시작하는 것이 좋습니다.런타임 버전 번호를 지정해야 합니다. |
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 위험하거나 문제가 있는 메서드에 대한 호출을 제거하거나 바꿉니다.
경고를 표시하지 않는 경우
문제가 있는 메서드에 대한 대안이 없는 경우에만 이 규칙에서 메시지를 표시하지 않아야 합니다.