Meziantou.Analyzer
2.0.183
설계, 사용, 보안, 성능 및 스타일 측면에서 C#의 일부 모범 사례를 시행하는 Roslyn 분석기.
Nuget 패키지 https://www.nuget.org/packages/meziantou.analyzer/ 설치하십시오.
이미 다른 분석기를 사용하고 있다면 잘 알려진 분석기로 복제 된 규칙을 확인할 수 있습니다.
| ID | 범주 | 설명 | 심각성 | 활성화되었습니다 | 코드 수정 |
|---|---|---|---|---|---|
| MA0001 | 용법 | String Comparison이 누락되었습니다 | ✔️ | ✔️ | |
| MA0002 | 용법 | iqualitycomparer <string> 또는 Icomparer <string>이 누락되었습니다 | ✔️ | ✔️ | |
| MA0003 | 스타일 | 가독성을 향상시키기 위해 매개 변수 이름을 추가하십시오 | ✔️ | ✔️ | |
| MA0004 | 용법 | task.configureawait를 사용하십시오 | ✔️ | ✔️ | |
| MA0005 | 성능 | array.empty <t> () 사용 | ✔️ | ✔️ | |
| MA0006 | 용법 | 평등 연산자 대신 String.equals를 사용하십시오 | ✔️ | ✔️ | |
| MA0007 | 스타일 | 마지막 값 후에 쉼표를 추가하십시오 | ✔️ | ✔️ | |
| MA0008 | 성능 | structlayoutattribute를 추가하십시오 | ✔️ | ✔️ | |
| MA0009 | 보안 | REGEX 평가 시간 초과를 추가하십시오 | ✔️ | ||
| MA0010 | 설계 | AttributeUsageAttribute가있는 속성 | ✔️ | ✔️ | |
| MA0011 | 용법 | iformatprovider가 누락되었습니다 | ✔️ | ||
| MA0012 | 설계 | 예약 된 예외 유형을 올리지 마십시오 | ✔️ | ||
| MA0013 | 설계 | 유형은 System.applicationException을 확장해서는 안됩니다 | ✔️ | ||
| MA0014 | 설계 | 시스템을 올리지 마십시오. ApplicationException 유형 | ✔️ | ||
| MA0015 | 용법 | ArgumentException에서 매개 변수 이름을 지정하십시오 | ✔️ | ||
| MA0016 | 설계 | 구현 대신 컬렉션 추상화를 선호합니다 | ✔️ | ||
| MA0017 | 설계 | 초록 유형에는 공개 또는 내부 생성자가 없어야합니다 | ✔️ | ✔️ | |
| MA0018 | 설계 | 일반적인 유형으로 정적 멤버를 선언하지 마십시오 (대신 CA1000을 사용하지 않음). | ✔️ | ||
| MA0019 | 용법 | eventargs.empty를 사용하십시오 | ✔️ | ✔️ | |
| MA0020 | 성능 | LINQ 방법 대신 직접 방법을 사용하십시오 | ✔️ | ✔️ | |
| MA0021 | 용법 | String.gethashCode 대신 StringComparer.gethashCode를 사용하십시오 | ✔️ | ✔️ | |
| MA0022 | 설계 | 반환 작업 | ✔️ | ✔️ | |
| MA0023 | 성능 | regexoptions.explicitcapture를 추가하십시오 | ✔️ | ||
| MA0024 | 용법 | 가능하면 명백한 문자열 comparer를 사용하십시오 | ✔️ | ✔️ | |
| MA0025 | 설계 | NotimplementedException을 던지는 대신 기능을 구현하십시오 | ✔️ | ||
| MA0026 | 설계 | Todo Comment를 수정하십시오 | ✔️ | ||
| MA0027 | 용법 | 암시 적으로 예외를 재창조하는 것을 선호합니다 | ✔️ | ✔️ | |
| MA0028 | 성능 | StringBuilder 사용을 최적화하십시오 | ✔️ | ✔️ | |
| MA0029 | 성능 | LINQ 메소드를 결합합니다 | ✔️ | ✔️ | |
| MA0030 | 성능 | 쓸모없는 Orderby Call을 제거하십시오 | ✔️ | ✔️ | |
| MA0031 | 성능 | enumerable.count () 사용을 최적화하십시오 | ✔️ | ✔️ | |
| MA0032 | 용법 | 취소 인수와 함께 오버로드를 사용하십시오 | |||
| MA0033 | 설계 | ThreadStaticAttribute로 인스턴스 필드를 태그하지 마십시오 | ✔️ | ||
| MA0035 | 용법 | 위험한 스레딩 방법을 사용하지 마십시오 | ✔️ | ||
| MA0036 | 설계 | 수업을 정적으로 만드십시오 | ✔️ | ✔️ | |
| MA0037 | 용법 | 빈 진술을 제거하십시오 | ✔️ | ✔️ | |
| MA0038 | 설계 | 메소드 정적으로 만들어 | ✔️ | ✔️ | |
| MA0039 | 보안 | 자신의 인증서 유효성 검사 방법을 작성하지 마십시오 | ✔️ | ||
| MA0040 | 용법 | 취소 복수 매개 변수를 하나의 메소드로 전달하십시오 | ✔️ | ✔️ | |
| MA0041 | 설계 | 속성을 정적으로 만들기 (감가 상각, 대신 CA1822 사용) | ✔️ | ✔️ | |
| MA0042 | 설계 | 비동기 방법으로 차단 호출을 사용하지 마십시오 | ✔️ | ✔️ | |
| MA0043 | 용법 | ArgumentException에서 운영자 이름을 사용하십시오 | ✔️ | ✔️ | |
| MA0044 | 성능 | 쓸모없는 토스트 링 호출을 제거하십시오 | ✔️ | ✔️ | |
| MA0045 | 설계 | 동기화 메소드에서 차단 호출을 사용하지 마십시오 (호출 메소드를 비동기로 만들어야 함) | ✔️ | ||
| MA0046 | 설계 | 이벤트 핸들러 <t>를 사용하여 이벤트를 선언하십시오 | ✔️ | ||
| MA0047 | 설계 | 네임 스페이스에서 유형을 선언합니다 | ✔️ | ||
| MA0048 | 설계 | 파일 이름은 유형 이름과 일치해야합니다 | ✔️ | ||
| MA0049 | 설계 | 유형 이름은 포함 된 네임 스페이스와 일치하지 않아야합니다 | ✔️ | ||
| MA0050 | 설계 | 반복자 방법에서 인수를 올바르게 검증하십시오 | ✔️ | ✔️ | |
| MA0051 | 설계 | 방법이 너무 길다 | ✔️ | ||
| MA0052 | 성능 | Constant enum.tostring을 이름으로 교체하십시오 | ✔️ | ✔️ | |
| MA0053 | 설계 | 수업을 봉인하십시오 | ✔️ | ✔️ | |
| MA0054 | 설계 | 잡힌 예외를 innerexception으로 포함시킵니다 | ✔️ | ||
| MA0055 | 설계 | Finalizer를 사용하지 마십시오 | ✔️ | ||
| MA0056 | 설계 | 생성자에서 우정된 멤버를 호출하지 마십시오 | ✔️ | ||
| MA0057 | 이름 지정 | 클래스 이름은 '속성'으로 끝나야합니다. | ✔️ | ||
| MA0058 | 이름 지정 | 클래스 이름은 '예외'로 끝나야합니다. | ✔️ | ||
| MA0059 | 이름 지정 | 클래스 이름은 'Eventargs'로 끝나야합니다. | ✔️ | ||
| MA0060 | 설계 | stream.read/stream.readasync가 반환 한 값은 사용되지 않습니다 | ✔️ | ||
| MA0061 | 설계 | 메소드 오버라이드는 기본값을 변경하지 않아야합니다 | ✔️ | ✔️ | |
| MA0062 | 설계 | 비 플래그 열거는 "Flagsattribute"로 표시되어서는 안됩니다. | ✔️ | ||
| MA0063 | 성능 | Orderby 이전에 사용하십시오 | ✔️ | ||
| MA0064 | 설계 | 공개적으로 액세스 가능한 인스턴스를 잠그지 마십시오 | ✔️ | ||
| MA0065 | 성능 | Default ValueType.equals 또는 Hashcode는 Struct Equality에 사용됩니다 | ✔️ | ||
| MA0066 | 성능 | 해시 테이블 비우호적 인 유형은 해시 테이블에서 사용됩니다. | ✔️ | ||
| MA0067 | 설계 | guid.empty를 사용하십시오 | ✔️ | ✔️ | |
| MA0068 | 설계 | 무효화 된 매개 변수 이름은 무효가 될 수 있습니다 | ✔️ | ||
| MA0069 | 설계 | 비정상적인 정적 필드는 보이지 않아야합니다 | ✔️ | ||
| MA0070 | 설계 | 쓸모없는 속성에는 설명이 포함되어야합니다 | ✔️ | ||
| MA0071 | 스타일 | 다른 중복을 사용하지 마십시오 | ✔️ | ✔️ | |
| MA0072 | 설계 | 마침내 블록에서 던지지 마십시오 | ✔️ | ||
| MA0073 | 스타일 | Bool Constant와의 비교를 피하십시오 | ✔️ | ✔️ | |
| MA0074 | 용법 | 암시 적 문화에 민감한 방법을 피하십시오 | ✔️ | ✔️ | |
| MA0075 | 설계 | 암시 적 문화에 민감한 토스스트링을 사용하지 마십시오 | ✔️ | ||
| MA0076 | 설계 | 보간 문자열에서 암시 적 문화에 민감한 토스스트링을 사용하지 마십시오 | ✔️ | ||
| MA0077 | 설계 | equals (t)를 제공하는 클래스는 iqueatable <t>를 구현해야합니다 | ✔️ | ✔️ | |
| MA0078 | 성능 | 캐스트 할 '선택'대신 '캐스트'를 사용하십시오 | ✔️ | ✔️ | |
| MA0079 | 용법 | .withCancellation ()을 사용하여 취소 token을 전달하십시오. | ✔️ | ✔️ | |
| MA0080 | 용법 | .withCancellation ()을 사용하여 취소 토큰을 사용하십시오. | |||
| MA0081 | 설계 | 메소드 오버라이드는 매개 변수 키워드를 생략하지 않아야합니다 | ✔️ | ✔️ | |
| MA0082 | 설계 | NAN은 비교에서 사용해서는 안됩니다 | ✔️ | ||
| MA0083 | 설계 | ConstructorArgument 매개 변수는 생성자에 존재해야합니다 | ✔️ | ||
| MA0084 | 설계 | 로컬 변수는 다른 기호를 숨기지 않아야합니다 | ✔️ | ||
| MA0085 | 용법 | 익명 대의원은 이벤트를 구독하지 않아야합니다. | ✔️ | ||
| MA0086 | 설계 | 파이널 라이저에서 던지지 마십시오 | ✔️ | ||
| MA0087 | 설계 | [DefaultParameterValue] 속성이있는 매개 변수도 [선택 사항]으로 표시되어야합니다. | ✔️ | ||
| MA0088 | 설계 | [defaultValue] 대신 [DefaultParameterValue]를 사용하십시오. | ✔️ | ||
| MA0089 | 성능 | 문자열 메서드 사용량을 최적화하십시오 | ✔️ | ✔️ | |
| MA0090 | 설계 | 빈 else/마침내 블록을 제거하십시오 | ✔️ | ||
| MA0091 | 용법 | 발신자는 예를 들어 이벤트와 같은 '이것'이어야합니다 | ✔️ | ✔️ | |
| MA0092 | 용법 | 정적 이벤트의 경우 발신자가 '널'이어야합니다 | ✔️ | ||
| MA0093 | 용법 | EventArgs는 무효가되어서는 안됩니다 | ✔️ | ✔️ | |
| MA0094 | 설계 | 비교 (t)를 제공하는 클래스는 incomparty <t>를 구현해야합니다 | ✔️ | ||
| MA0095 | 설계 | iquateable을 구현하는 클래스는 equals (Object)를 무시해야합니다. | ✔️ | ||
| MA0096 | 설계 | Icompary <t>를 구현하는 클래스도 iquateable <t>를 구현해야합니다 | ✔️ | ||
| MA0097 | 설계 | icomparty <t> 또는 icomparable을 구현하는 클래스는 비교 연산자를 무시해야합니다. | ✔️ | ||
| MA0098 | 성능 | LINQ 메소드 대신 인덱서를 사용하십시오 | ✔️ | ✔️ | |
| MA0099 | 용법 | 0 대신 명시 적 열거 값을 사용하십시오 | ✔️ | ||
| MA0100 | 용법 | 자원을 처분하기 전에 작업을 기다립니다 | ✔️ | ||
| MA0101 | 용법 | 문자열에는 암시 적 줄 문자가 포함되어 있습니다 | ? | ✔️ | ✔️ |
| MA0102 | 설계 | 회원을 읽으십시오 | ✔️ | ✔️ | |
| MA0103 | 용법 | 평등 연산자 대신 시퀀스 균등을 사용하십시오 | ✔️ | ✔️ | |
| MA0104 | 설계 | BCL에서 이름을 가진 유형을 만들지 마십시오. | |||
| MA0105 | 성능 | 클로저를 사용하는 대신 Lambda 매개 변수를 사용하십시오 | ✔️ | ||
| MA0106 | 성능 | 'FactoryArgument'매개 변수와 함께 오버로드를 사용하여 폐쇄를 피하십시오. | ✔️ | ||
| MA0107 | 설계 | 문화에 민감한 대상을 사용하지 마십시오 | |||
| MA0108 | 용법 | 중복 인수 값을 제거하십시오 | ✔️ | ✔️ | |
| MA0109 | 설계 | Span <t> 또는 메모리 <t>가있는 과부하를 추가하십시오 | |||
| MA0110 | 성능 | Regex 소스 생성기를 사용하십시오 | ✔️ | ✔️ | |
| MA0111 | 성능 | formattableString 대신 String.create를 사용하십시오 | ✔️ | ✔️ | |
| MA0112 | 성능 | 'any () 대신'count> 0 '을 사용하십시오. | |||
| MA0113 | 설계 | dateTime.unixePoch를 사용하십시오 | ✔️ | ✔️ | |
| MA0114 | 설계 | DateTimeOffset.unixePoch를 사용하십시오 | ✔️ | ✔️ | |
| MA0115 | 용법 | 알 수없는 구성 요소 매개 변수 | ✔️ | ||
| MA0116 | 설계 | [SupplyParameterFromQuery] 속성을 가진 매개 변수도 [매개 변수]로 표시되어야합니다. | ✔️ | ✔️ | |
| MA0117 | 설계 | [EditorRequired] 속성이있는 매개 변수도 [매개 변수]로 표시되어야합니다. | ✔️ | ✔️ | |
| MA0118 | 설계 | [jsinvokable] 방법은 공개되어야합니다 | ✔️ | ||
| MA0119 | 설계 | jsruntime은 일시화 된 또는 일시화 된화에 사용해서는 안됩니다 | ✔️ | ||
| MA0120 | 성능 | 반환 된 값을 사용하지 않을 때는 InvokeVoidAsync를 사용하십시오 | ✔️ | ✔️ | |
| MA0121 | 설계 | 매개 변수 값을 덮어 쓰지 마십시오 | |||
| MA0122 | 설계 | [SupplyParameterFromQuery] 속성을 가진 매개 변수는 라우팅 가능한 구성 요소 (@Page)에서만 유효합니다. | ✔️ | ||
| MA0123 | 설계 | 시퀀스 번호는 일정해야합니다 | ✔️ | ||
| MA0124 | 설계 | 로그 매개 변수 유형이 유효하지 않습니다 | ✔️ | ||
| MA0125 | 설계 | 로그 매개 변수 유형 목록에는 유효하지 않은 유형이 포함됩니다. | ✔️ | ||
| MA0126 | 설계 | 로그 매개 변수 유형 목록에는 중복이 포함되어 있습니다 | ✔️ | ||
| MA0127 | 용법 | 패턴 대신 String.equals를 사용하십시오 | |||
| MA0128 | 용법 | 사용 'IS'는 시퀀스 평등 대신 연산자입니다 | ✔️ | ✔️ | |
| MA0129 | 용법 | 문을 사용하는 작업을 기다립니다 | ✔️ | ||
| MA0130 | 용법 | getType ()는 System.Type 인스턴스에서 사용해서는 안됩니다 | ✔️ | ||
| MA0131 | 용법 | ArgumentNullexception.throwifnull은 널리화되지 않은 유형과 함께 사용해서는 안됩니다 | ✔️ | ||
| MA0132 | 설계 | dateTimeOffset으로 암시 적으로 변환하지 마십시오 | ✔️ | ||
| MA0133 | 설계 | 암시 적 변환에 의존하는 대신 dateTimeOffSet을 사용하십시오 | ✔️ | ||
| MA0134 | 용법 | 비동기 호출의 결과를 관찰하십시오 | ✔️ | ||
| MA0135 | 설계 | 로그 매개 변수에는 구성된 유형이 없습니다 | |||
| MA0136 | 용법 | 원시 문자열에는 암시 적 줄 문자가 포함되어 있습니다 | ? | ✔️ | |
| MA0137 | 설계 | 메소드가 차단 가능한 유형을 반환 할 때 'Async'접미사 사용 | |||
| MA0138 | 설계 | 메소드가 차단 가능한 유형을 반환하지 않으면 'Async'접미사를 사용하지 마십시오. | |||
| MA0139 | 설계 | 로그 매개 변수 유형이 유효하지 않습니다 | ✔️ | ||
| MA0140 | 설계 | IF와 ELSE 지점에는 동일한 코드가 있습니다 | ✔️ | ||
| MA0141 | 용법 | 불평등 연산자 대신 패턴 일치 사용 Null Check를 사용하십시오. | ✔️ | ||
| MA0142 | 용법 | Null Check를 위해 평등 연산자 대신 패턴 일치 사용 | ✔️ | ||
| MA0143 | 설계 | 1 차 생성자 매개 변수는 준비되어 있어야합니다 | ✔️ | ||
| MA0144 | 성능 | System.operatingsystem을 사용하여 현재 OS를 확인하십시오 | ✔️ | ||
| MA0145 | 용법 | [UnsaFecessorAttribute] 메소드의 서명은 유효하지 않습니다 | ✔️ | ||
| MA0146 | 용법 | 이름은 로컬 기능에 대해 명시 적으로 설정해야합니다 | ✔️ | ||
| MA0147 | 용법 | 대의원을위한 비동기 무효 방법을 피하십시오 | ✔️ | ||
| MA0148 | 용법 | 이산 가치를 위해 평등 연산자 대신 패턴 일치 사용 | ✔️ | ||
| MA0149 | 용법 | 불평등 연산자 대신 패턴 매칭을 개별 값으로 사용하십시오. | ✔️ | ||
| MA0150 | 설계 | 기본 오브젝트를 호출하지 마십시오 | ✔️ | ||
| MA0151 | 용법 | DebuggerDisplay에는 유효한 회원이 포함되어야합니다 | ✔️ | ||
| MA0152 | 성능 | 두 번 기다리는 대신 UNHAP를 사용하십시오 | ✔️ | ||
| MA0153 | 설계 | DataClassificationAttribute로 직접 장식 된 기호를 로그하지 마십시오 | ✔️ | ||
| MA0154 | 설계 | XML 주석에 langword를 사용하십시오 | ✔️ | ✔️ | |
| MA0155 | 설계 | 비동기 무효 방법을 사용하지 마십시오 | |||
| MA0156 | 설계 | 메소드가 iAsyncenumerable <t>를 반환 할 때 'Async'접미사를 사용하십시오 | |||
| MA0157 | 설계 | 메소드가 Iasyncenumerable을 반환하지 않으면 'Async'접미사를 사용하지 마십시오. | |||
| MA0158 | 성능 | System.threading.lock을 사용하십시오 | ✔️ | ||
| MA0159 | 성능 | 'orderby'대신 '주문'을 사용하십시오. | ✔️ | ✔️ | |
| MA0160 | 성능 | trygetValue 대신 ContainsKey를 사용하십시오 | ✔️ | ||
| MA0161 | 용법 | useshellexecute는 명시 적으로 설정되어야합니다 | |||
| MA0162 | 용법 | ProcessStartInfo를 사용하여 과부하를 사용하십시오 | |||
| MA0163 | 용법 | 표준 입력 또는 출력을 리디렉션 할 때 useshellexecute는 거짓이어야합니다. | ✔️ | ||
| MA0164 | 스타일 | 괄호를 사용하여 패턴을 더 명확하게하지 않습니다 | ✔️ | ✔️ | |
| MA0165 | 용법 | 보간 된 문자열을 만듭니다 | ? | ✔️ | ✔️ |
| ID | 억압 규칙 | 정당화 |
|---|---|---|
MAS0001 | CA1822 | BenchmarkDotnet 속성으로 장식 된 메소드에 대한 CA1822를 억제하십시오. |
MAS0002 | CA1822 | [jsonPropertyName] 또는 [jsoninclude]와 같은 System.text.json 속성으로 장식 된 메소드에 대해 CA1822를 억제하십시오. |
MAS0003 | IDE0058 | 잘 알려진 유형의 IDE0058을 억제하십시오 |