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도 마찬가지입니다 ...
- 솔루션 탐색기로 이동
- 프로젝트로 이동
- 참조 확장
- 분석기 확장
- StyleCop.Analyzers 확장
- 전역 (프로젝트) 수준에서 비활성화하려는 특정 규칙을 마우스 오른쪽 버튼으로 클릭합니다.
- 규칙 세트 심각도 설정-> 없음 선택
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
'IT이야기' 카테고리의 다른 글
JavaEE에서 'Facet'이란 (0) | 2021.04.03 |
---|---|
PHP에서 사용자 로그인 시도를 제한하는 방법 (0) | 2021.04.03 |
R 객체가 함수 또는 "for"루프에서 인쇄되지 않는 이유 (0) | 2021.04.02 |
C 오류 : 함수에 대한 정의되지 않은 참조이지만 정의되어 있습니다. (0) | 2021.04.02 |
Git (Hub)는 짧은 SHA에서 발생할 수 있는 충돌 처리 (0) | 2021.04.02 |