안정성 규칙

안정성 규칙은 올바른 메모리 및 스레드 사용과 같은 라이브러리 및 애플리케이션 안정성을 지원합니다. 안정성 규칙은 다음을 포함합니다.

규칙 설명
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) 지정합니다.