다음을 통해 공유


CA2001: 문제가 있는 메서드는 호출하지 마십시오.

TypeName

AvoidCallingProblematicMethods

CheckId

CA2001

범주

Microsoft.Reliability

변경 수준

주요 변경 아님

원인

멤버에서 잠재적 위험이나 문제가 있는 메서드를 호출합니다.

규칙 설명

불필요하고 잠재적 위험이 있는 메서드는 호출하지 마십시오.

이 규칙은 멤버가 다음 메서드 중 하나를 호출할 때 위반이 발생합니다.

메서드

설명

GC.Collect

GC.Collect를 호출하면 응용 프로그램 성능에 상당한 영향을 미칠 수 있으며 거의 필요하지 않습니다. 자세한 내용은 MSDN의 Rico Mariani's Performance Tidbits 블로그 항목을 참조하십시오.

Thread.Resume

Thread.Suspend

Thread.Suspend 및 Thread.Resume은 예기치 않은 동작으로 인해 사용되지 않습니다. 스레드를 동기화하거나 리소스를 보호하려면 Monitor, [T:System.Threading.Mutex,] Mutex, SemaphoreSystem.Threading 네임스페이스의 다른 클래스를 사용하십시오.

SafeHandle.DangerousGetHandle

DangerousGetHandle 메서드는 유효하지 않은 핸들을 반환할 수 있기 때문에 보안 위험이 발생할 수 있습니다. DangerousGetHandle 메서드를 안전하게 사용하는 방법에 대한 자세한 내용은 DangerousAddRefDangerousRelease 메서드를 참조하십시오.

Assembly.LoadFrom

Assembly.LoadFile

Assembly.LoadWithPartialName

이러한 메서드는 예기치 않은 위치에서 어셈블리를 로드할 수 있습니다. 예를 들어, 어셈블리를 로드하는 메서드에 대한 자세한 내용은 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을 호출한 다음, 프로세스에서 관리 코드 응용 프로그램을 시작하는 것이 좋습니다. 런타임 버전 번호를 지정해야 합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 위험하거나 문제가 있는 메서드에 대한 호출을 제거하거나 바꿉니다.

경고를 표시하지 않는 경우

문제가 있는 메서드에 대한 대안이 없는 경우에만 이 규칙에서 메시지를 표시하지 않아야 합니다.

참고 항목

기타 리소스

안정성 경고