IT이야기

StyleCop 경고를 억제하는 방법

cyworld 2021. 4. 2. 21:18
반응형

StyleCop 경고를 억제하는 방법은 무엇입니까?


나는 StyleCop을 사용하고 있으며 내 스타일에 맞지 않는 경고를 억제하고 싶습니다. 나는 해결책을 선호한다

1) 인라인 코드 억제
2) 글로벌 설정 억제

나는 인터넷을 검색했지만 여전히 억압하는 방법을 모르겠습니다 .

방법 1)의 경우 다음 줄을 추가한다고 말했습니다.

[어셈블리 : SuppressMessage ( "Microsoft.Design", "SA1202 : 모든 개인 메서드는 모든 공용 메서드 뒤에 배치해야합니다.", 범위 = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]

그러나 어디에서 어떤 네임 스페이스를 사용할 것인지는 밝히지 않습니다.

방법 2)의 경우 GlobalSuppress 파일을 사용한다고 말했지만 지금은 방법을 검색하는 것이 쉽지 않은 것 같습니다.

도와주세요.

[편집 됨] 제 경우에는 SA1202에 대한 경고 가 있습니다 . 관련된 코드를 지역별로 그룹화하기 때문에 불편한 모든 공용 메서드 뒤에 모든 개인 메서드를 배치해야합니다 . 일부 특정 방법에 대한 경고를 억제하고 싶습니다.


필요한 것은 다음과 같습니다.

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]

인라인 억제의 예는 다음과 유사합니다. 억제와 비교하여 코드의 네임 스페이스를 검사합니다.

namespace Soapi
{
        ///<summary>
        ///</summary>
        ///<param name = "message"></param>
        ///<param name = "statusCode"></param>
        ///<param name = "innerException"></param>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")]
        public ApiException(string message, ErrorCode statusCode, Exception innerException)
            : base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException)
        {
            this.statusCode = statusCode;
        }

전역 억제 ​​파일은 이름이 지정된 프로젝트의 루트에있는 파일이며 GlobalSuppressions.cs다음과 같을 수 있습니다.

// This file is used by Code Analysis to maintain SuppressMessage 
// attributes that are applied to this project. 
// Project-level suppressions either have no target or are given 
// a specific target and scoped to a namespace, type, member, etc. 
//
// To add a suppression to this file, right-click the message in the 
// Error List, point to "Suppress Message(s)", and click 
// "In Project Suppression File". 
// You do not need to add suppressions to this file manually. 

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")]

경고를 마우스 오른쪽 버튼으로 클릭하여이 코드를 자동으로 생성 할 수 있습니다.


StyleCop 4.3.2부터는 소스 코드 내에 억제 속성을 추가하여 규칙 위반보고를 억제 할 수 있습니다.

규칙 억제 http://stylecop.soyuz5.com/Suppressions.html

그러나 그것은 말한다-

글로벌 억제

StyleCop은 전역 억제 ​​또는 파일 수준 억제 개념을 지원하지 않습니다. 억제는 코드 요소에 배치되어야합니다.


StyleCop을 설치 한 경우 프로젝트를 마우스 오른쪽 버튼으로 클릭하면 StyleCop 옵션이 표시됩니다. 이것을 클릭하면 특정 규칙이 프로젝트에 대해 실행되는 것을 방지 할 수 있음을 알 수 있습니다. 또한 다른 프로젝트간에 공유 할 별도의 규칙 파일을 만들 수 있습니다. 즉, 원하는 방식으로 규칙을 구성한 다음 모든 프로젝트간에 해당 구성을 공유 할 수 있습니다.

개별 재정의의 경우 SuppressMessage갈 길입니다.


Style Cop의 훈계를 읽고 영숫자 코드를 찾으십시오. 귀하의 경우 'SA1202'. 그런 다음 Style Cop 웹 사이트에서 해당 페이지로 이동합니다. URL을 적절하게 변경하십시오 https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1202.md

'How to Suppress Violations'라는 줄을 복사합니다. Style Cop이 신음하는 클래스 위에 속성을 붙여 넣습니다.

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]

코드를 더럽히는 대신 규칙을 제거 할 수 없습니까?

FxCop도 마찬가지입니다 ...


  1. 솔루션 탐색기로 이동
  2. 프로젝트로 이동
  3. 참조 확장
  4. 분석기 확장
  5. StyleCop.Analyzers 확장
  6. 전역 (프로젝트) 수준에서 비활성화하려는 특정 규칙을 마우스 오른쪽 버튼으로 클릭합니다.
  7. 규칙 세트 심각도 설정-> 없음 선택

1. 귀하의 경우 올바른 SuppressMessage속성은 다음과 같아야합니다.

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}

다른 요소 (예 : 클래스)에 배치 할 수 있습니다. 그러면 전체 클래스의 모든 유사한 위반이 억제됩니다.

나는 또한이 분야에 무엇을 써야할지 분명하지 않다는 데 동의합니다.

실제로 첫 번째는 StyleCop 분석기 클래스 의 정규화 된 이름이어야하며 소스 코드 (예 : 여기에서 ) 에서 찾을 수 있습니다 . 두 번째는 규칙 코드로 시작하고 콜론과 규칙 열거 의 이름으로 시작해야합니다 (다행히도 항상 설정 편집기에 표시되는 규칙 이름처럼 보이지만 공백은 없음).

2. "전역 적으로"규칙을 억제하는 것과 관련하여-설정 편집기를 통해 규칙을 끄지 않는 이유는 무엇입니까? 설정 파일은 파일 시스템을 통해 상속되므로 폴더 구조의 "상단"에 하나의 "주"설정 파일을 쉽게 가질 수 있으며 일부 프로젝트에 대한 예외를 제외하고 일부 다른 파일 (기본 파일과 "차이점"포함)을 가질 수 있습니다. 원하는 경우 ( 여기에 설명 된대로 ).

행운을 빕니다!


또는 지역의 코드를 부분 클래스로 이동할 수 있습니다. 그러면 stylecop 규칙의 문제는 사라질 것입니다.


프로젝트 루트 폴더에있는 Settings.StyleCop 파일에서 원하지 않는 규칙을 비활성화 할 수 있습니다. 규칙이 포함 된 네임 스페이스가 필요합니다. 여기에서 찾을 수 있습니다. http://stylecop.soyuz5.com/StyleCop%20Rules.html

참고로 Settings.stylecop 파일 코드 :

<StyleCopSettings Version="105">
  <Analyzers>
    <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
      <Rules>
        <Rule Name="ElementsMustBeSeparatedByBlankLine">
          <RuleSettings>
            <BooleanProperty Name="Enabled">False</BooleanProperty>
          </RuleSettings>
        </Rule>
      </Rules>
      <AnalyzerSettings />
    </Analyzer>
  </Analyzers>
</StyleCopSettings>

이미 제공된 유용한 답변 외에도 :

억제 파일에서 경고를 억제하면 GlobalSuppressions.cs해당 [assembly: SuppressMessage(StyleCop...blabla행을 편집 하고 Scope=...Target=...태그를 완전히 제거 할 수 있습니다 . 이는 프로젝트에서 억제를 글로벌하게 만듭니다.


README.md 에 대한 StyleCop.Analyzers 비주얼 스튜디오 2015+에서 사용 NuGet 패키지는에 대한 링크가 포함되어 규칙에 대한 문서를 . 각 규칙에 대한 문서에는 "위반을 억제하는 방법"섹션이 있습니다. 를 들어 SA1202 규칙 , 옵션은 다음과 같습니다 :

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]

#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess

참조 URL : https://stackoverflow.com/questions/3287656/how-to-suppress-a-stylecop-warning

반응형