19

내가 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 베타를 사용하고 있습니다.

답변

18

아마도 올바른 코드를 얻었 겠지만 프로젝트 등록 정보에서 사전 컴파일러 정의 기호로 CODE_ANALYSIS를 추가해야합니다. CODE_ANALYSIS가 정의 된 경우 해당 SuppressMessage 특성은 컴파일 된 바이너리에만 남아 있다고 생각합니다.

+2

여러 프로젝트가있는 솔루션이 있습니다. 모든 프로젝트에 대해 CODE_ANALYSIS를 추가해야합니다. – Diizzy

2

모듈 수준 억제 메시지는 네임 스페이스 선언 전에 또는 assemblyinfo.cs에서 FxCop 오류를 발생시키는 코드와 동일한 파일에 붙여 넣어야합니다. 또한 CODE_ANALYSIS를 조건부 컴파일러 기호로 정의해야합니다 (Project> Properties> Build). 이 작업이 완료되면 프로젝트를 완전히 다시 빌드하고 다음에 FxCop을 실행할 때 오류가 "Excluded in Source"탭으로 이동해야합니다.

또한 하나의 작은 팁이지만 많은 FxCop 제외를 다루는 경우 주변 지역을 감싸는 것이 유용 할 수 있습니다.

4

FxCop 1.36에는 "Spelling & 분석"탭에 실제로 생성 된 코드 분석을 보류하는 프로젝트 옵션이 있습니다.

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

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

또한 FxCop 1.36의 RTM version으로 업그레이드해야 베타가 최신 버전을 자동으로 검색하지 않습니다.