2009-09-03 2 views
5

을 제외하지만 두 가지 규칙, StyleCop 한 서로를 제외합니다 FxCop 하나가있는 곳으로왔다. StyleCop의 규칙과 일치하도록 코드를 수정하면 FxCop 유효성 검사가 실패하고 그 반대의 경우도 마찬가지입니다.StyleCop와의 FxCop 규칙이 내 코드를 개선하기 위해 StyleCop와의 FxCop 도구를 사용하고 서로

첫 번째 규칙은 모든 사용 지침은 네임 스페이스의 내부에 위치해야 함을 말한다 StyleCop에서 SA1200입니다.

모든 사용 지침

는 네임 스페이스의 내부에 배치해야합니다.

는 그래서 그것은 StyleCop, 더 이상 경고를 확인했다이

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

같은 짓을했다. 이제 FxCop 유효성 검사를 실행하고 CA1014가 위반되었다고 알려줍니다.

'MyApp.dll'은 외부에서 보이는 유형을 노출하므로 CLSCompliant (true)로 표시하십시오.

[ClsCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

을하지만 ClsCompliant 속성이 인정되지 않기 때문에 (이것은 내가 MyNamespace의 내부에 포함 System 네임 스페이스 때문에) 지금은 내 프로젝트를 빌드 할 수 없습니다

는 다음과 같이해야 내가이 문제를 해결하려면 . 따라서 using System; 지시문을 MyNamespace 선언 외부로 옮기면됩니다. 이렇게하면 코드가 컴파일되지만 다시 StyleCop에서 규칙을 위반하게됩니다.

StyleCop 또는의 FxCop의 규칙 중 하나를 비활성화를 제외하고이 문제를 해결하는 방법은 없나요? 그리고 어떤 규칙을 사용할 수 없게해야합니까? 어느 것이 덜 중요합니까?

답변

15

를 사용하여 전체 속성 이름 : BTW

[System.CLSCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

: 당신이 CLSCompliant로 전체 어셈블리를 표시 할 속성에

[assembly: System.CLSCompliant(true)] 

를 넣어 경우/AssemblyInfo.cs에이

+4

어셈블리가 CLAPompliant로 표시되어야한다고 생각합니다. maciejkow는 네임 스페이스 준수를 표시하는 대신 지적했습니다. –

3

나의 제안 파일 "모든 지시문을 사용하여 네임 스페이스 내부에 배치해야합니다."를 해제하는 것입니다. 스타일 컷의 규칙. 특히 코드 생성기 (심지어 VS 자체의 코드 생성기)의 대부분이이 방법을 따르지 않기 때문에 실용적이지 않습니다.

+0

나는 생성 된 파일을 무시하기 위해 StyleCop을 설정하는 것이 더 좋습니다. – RaYell

+2

예, 해당 속성이 표시된 경우. 불행히도 일부 코드 생성기는 생성 된 코드를 표시하지 않습니다. –