안정성 규칙
안정성 규칙은 올바른 메모리 및 스레드 사용과 같은 라이브러리 및 애플리케이션 안정성을 지원합니다. 안정성 규칙은 다음을 포함합니다.
규칙 | 설명 |
---|---|
CA2000: 범위를 벗어나기 전에 개체를 삭제하십시오. | 개체의 종료자가 실행되지 못하도록 하는 예외 이벤트가 발생할 수 있기 때문에 개체에 대한 모든 참조가 범위를 벗어나기 전에 개체를 명시적으로 삭제해야 합니다. |
CA2002: 약한 ID를 가진 개체를 잠그지 마십시오. | 애플리케이션 도메인 경계를 가로질러 직접 액세스할 수 있는 개체를 약한 ID를 가진 개체라고 합니다. 약한 ID를 가진 개체에 대해 잠금을 가져오려고 시도하는 스레드는 같은 개체에 대해 잠금을 가진 다른 애플리케이션 도메인의 스레드에 의해 차단될 수 있습니다. |
CA2007: 작업을 직접 기다리지 마세요. | 비동기 메서드가 Task를 직접 대기합니다. |
CA2008: TaskScheduler를 전달하지 않고 작업을 만들지 마세요. | 작업 만들기 또는 연속 작업에서 TaskScheduler 매개 변수를 지정하지 않는 메서드 오버로드를 사용합니다. |
CA2009: ImmutableCollection 값에서 ToImmutableCollection을 호출하지 마세요. | ToImmutable 메서드가 System.Collections.Immutable 네임스페이스의 변경이 불가능한 컬렉션에서 불필요하게 호출되었습니다. |
CA2011: setter 내에서 속성을 할당하지 마세요. | 속성이 자체 set 접근자 내에서 실수로 값을 할당받았습니다. |
CA2012: ValueTasks를 올바르게 사용 | 멤버 호출에서 반환되는 ValueTasks는 직접 대기해야 합니다. ValueTask를 여러 번 사용하거나 완료가 확인되기 전에 해당 결과에 직접 액세스하면 예외나 손상이 발생할 수 있습니다. 이러한 ValueTask를 무시하면 기능 버그가 발생하거나 성능이 저하될 수 있습니다. |
CA2013: 값 형식에 ReferenceEquals를 사용하지 마세요. | System.Object.ReferenceEquals를 사용하여 값을 비교할 때 objA 및 objB가 값 형식이면 ReferenceEquals 메서드로 전달되기 전에 boxing됩니다. 즉, objA와 objB가 값 형식의 동일한 인스턴스를 나타내는 경우에도 ReferenceEquals 메서드는 false를 반환합니다. |
CA2014: 루프에 stackalloc를 사용하지 마세요 | Stackalloc에 의해 할당된 스택 공간은 현재 메서드 호출이 끝날 때만 릴리스됩니다. 루프에서 사용하면 바인딩되지 않은 스택이 증가하고 최종 스택 오버플로 조건이 발생할 수 있습니다. |
CA2015: MemoryManager<T>에서 파생된 형식에 대해 종료자를 정의하지 마세요 | MemoryManager<T>에서 파생된 형식에 종료자를 추가하면 Span<T>에서 계속 메모리를 사용하는 동안 메모리 해제가 허용될 수 있습니다. |
CA2016: CancellationToken 매개 변수를 사용하는 메서드로 전달 | CancellationToken 매개 변수를 사용하는 메서드에 해당 메서드를 전달하여 작업 취소 알림이 올바르게 전파되도록 하거나, 명시적으로 CancellationToken.None 을 전달하여 의도적으로 토큰을 전파하지 않음을 나타냅니다. |
CA2017: 매개 변수 개수 불일치 | 로깅 메시지 템플릿에 제공된 매개 변수 수가 명명된 자리 표시자 수와 일치하지 않습니다. |
CA2018: Buffer.BlockCopy 에 대한 count 인수는 복사할 바이트 수를 지정해야 합니다. |
Buffer.BlockCopy 를 사용하는 경우 count 인수는 복사할 바이트 수를 지정합니다. 요소 크기가 정확히 1바이트인 배열의 count 인수에 대해서만 Array.Length 를 사용해야 합니다. byte , sbyte , bool 배열에는 크기가 1바이트인 요소가 있습니다. |
CA2019: ThreadStatic 필드는 인라인 초기화를 사용하면 안 됨 |
ThreadStaticAttribute 주석이 추가된 필드는 static (visual Basic에서는 Shared ) 생성자에서 인라인으로 또는 명시적으로 초기화됩니다. |
CA2020: IntPtr/UIntPtr의 기본 제공 연산자로 인한 동작 변경 방지 | .NET 7에 추가된 일부 기본 제공 연산자는 .NET 6 및 이전 버전의 사용자 정의 연산자와 다르게 작동합니다. 오버플로하는 동안 검사 없는 컨텍스트에서 throw하는 데 사용한 일부 연산자는 검사 컨텍스트 내에서 래핑되지 않는 한 더 이상 throw되지 않습니다. 이전에 검사 컨텍스트에서 throw하지 않았던 일부 연산자는 이제 검사 없는 컨텍스트 내에서 래핑되지 않는 한 throw됩니다. |
CA2021: 호환되지 않는 형식을 사용하여 Enumerable.Cast<T> 또는 Enumerable.OfType<T> 를 호출하지 마세요. | 입력 컬렉션의 형식과 호환되지 않는 형식 매개 변수를 호출 Enumerable.Cast<TResult>(IEnumerable) 하거나 Enumerable.OfType<TResult>(IEnumerable) 지정합니다. |
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET