문제

제가 작업 중인 FxCop 프로젝트에서는 Windows Forms 디자이너가 생성한 InitializeComponent() 메서드에 대한 많은(400개 이상의) 오류가 표시되었습니다.이러한 오류의 대부분은 레이블의 Text 속성 할당에 불과합니다.

소스에서 해당 메서드를 억제하고 싶어서 FxCop에서 생성된 억제 코드를 AssemblyInfo.cs에 복사했지만 작동하지 않습니다.

FxCop이 클립보드에 복사한 속성입니다.

[module: SuppressMessage("Microsoft.Globalization",
    "CA1303:DoNotPassLiteralsAsLocalizedParameters",
    Scope = "member",
    Target = "WindowsClient.MainForm.InitializeComponent():System.Void",
    MessageId = "System.Windows.Forms.Control.set_Text(System.String)")]

이 메시지를 표시하지 않는 올바른 속성을 아는 사람이 있나요?

추신:저는 Visual Studio 2005, C#, FxCop 1.36 베타를 사용하고 있습니다.

도움이 되었습니까?

해결책

올바른 코드를 얻었을 수도 있지만 프로젝트 속성에서 사전 컴파일러 정의 기호로 CODE_ANALYSIS를 추가해야 합니다.내 생각에 해당 SuppressMessage 속성은 CODE_ANALYSIS가 정의된 경우에만 컴파일된 바이너리에 남아 있는 것 같습니다.

다른 팁

FxCop 1.36에는 실제로 생성된 코드에 대한 분석을 억제하는 "맞춤법 및 분석" 탭에 프로젝트 옵션이 있습니다.

생성된 모든 코드에 대해 분석을 끄지 않으려면 조건부 컴파일 기호 목록(프로젝트 속성, 빌드 탭)에 CODE_ANALYSIS 기호를 추가해야 합니다.이 기호를 정의하지 않으면 SupressMessage 특성이 컴파일된 코드에서 제거되므로 FxCop에서 해당 특성을 볼 수 없습니다.

SuppressMessage 특성의 또 다른 문제는 특정 메서드 이름(이 경우 WindowsClient.MainForm.InitializeComponent():System.Void)의 "대상"을 나열하고 특정 "범위"를 나열한다는 것입니다.이를 제거해 볼 수도 있습니다.그렇지 않으면 이 SuppressMessage를 메서드의 각 인스턴스에 추가해야 합니다.

또한 RTM 버전 FxCop 1.36의 베타에서는 최신 버전을 자동으로 감지하지 않습니다.

모듈 수준 억제 메시지는 네임스페이스 선언 앞이나 Assemblyinfo.cs에서 FxCop 오류를 발생시키는 코드와 동일한 파일에 붙여넣어야 합니다.또한 CODE_ANALYSIS를 조건부 컴파일러 기호(프로젝트 > 속성 > 빌드)로 정의해야 합니다.해당 위치에 있으면 프로젝트를 완전히 다시 빌드하고 다음에 FxCop을 실행할 때 오류가 "소스에서 제외됨" 탭으로 이동되어야 합니다.

또한 하나의 작은 팁이지만 많은 FxCop 제외를 처리하는 경우 해당 제외 영역을 둘러싸서 방해가 되지 않도록 하는 것이 유용할 수 있습니다.

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