IDisposable이 올바르게 처리되지 않은 경우 Resharper가 경고하도록 설정할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/101664

문제

Resharper 4(또는 Visual Studio 자체...)에 코드 래핑을 잊어버린 경우 강제로 경고를 표시하는 설정이 있나요? using 차단하거나 적절한 Dispose 호출을 생략합니다. finally 차단하다?

도움이 되었습니까?

해결책

올바른 자동 폐기 분석에는 글로벌 방식의 DFA(데이터 흐름 분석)가 필요합니다.IDisposable 개체를 만들고 해당 개체에 대한 메서드를 호출하지 않고 인수로 전달하지 않을 가능성은 거의 없습니다.일회용 개체가 다른 메서드(해당 멤버 호출 포함, "this"가 암시적으로 전달되는 경우 포함)에 전달되는 경우 도구는 Dispose가 내부에서 호출되지 않았는지 또는 해당 개체가 나중에 처리하기 위해 어딘가에 저장되지 않았는지 분석해야 합니다.

즉, 일회용 개체가 실제로 "사용" 구문이나 다른 방식으로 처리되었는지 확인하는 순진한 구현은 너무 많은 거짓 긍정을 생성하고 분석을 쓸모 없게 만듭니다.

다른 팁

현재 방법에 불만이 있어서 나는 나만의 방법을 만들었습니다. 눈일회용.IL 계측기이므로 정적 분석에서 포착하지 못한 많은 누수를 포착해야 합니다.아직 초기 단계이므로 의견을 환영합니다.

코드를 스캔하고 코드 분석을 업데이트하여 방금 설명한 구조가 누락된 개체를 반영하도록 코드 편집기 내에서 실행할 수 있는 R#에 대한 작은 추가 기능을 디자인할 수 있습니다.

해당 경로를 선택하기로 결정했다면 R# 플러그인 아키텍처를 살펴보겠습니다.

보다 이 블로그 게시물 테스트를 위한 몇 가지 트릭 Dispose() ~에 DEBUG.기본적으로 폐기되었음을 주장하는 DEBUG 전용 소멸자를 작성합니다.

이에 대해 FXCop을 살펴볼 수 있습니다. http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

클래스 및/또는 생성한 변수의 필드에 대한 경고일지라도 R#이 이를 처리하지 않는다는 점은 유감입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top