Aracılığıyla paylaş


Güvenilirlik kuralları

Güvenilirlik kuralları, doğru bellek ve iş parçacığı kullanımı gibi kitaplık ve uygulama güvenilirliğini destekler. Güvenilirlik kuralları şunlardır:

Kural Açıklama
CA2000: Kapsam kaybetmeden önce nesneleri at Bir nesnenin sonlandırıcısının çalışmasını engelleyecek olağanüstü bir olay meydana gelebileceğinden, nesneye yapılan tüm başvurular kapsam dışında kalmadan önce açıkça atılmalıdır.
CA2002: Zayıf kimliği olan nesneleri kilitlemeyin Bir nesnenin, uygulama etki alanı sınırları arasında doğrudan erişilebildiği durumlarda zayıf bir kimliğe sahip olduğu söylenir. Zayıf bir kimliğe sahip bir nesne üzerinde kilit almaya çalışan bir iş parçacığı, aynı nesne üzerinde kilidi olan farklı bir uygulama etki alanındaki ikinci bir iş parçacığı tarafından engellenebilir.
CA2007: Doğrudan görev beklemeyin bekler.
CA2008: TaskScheduler geçirmeden görev oluşturmayın Görev oluşturma veya devam etme işlemi, TaskScheduler parametresi belirtmeyen bir yöntem aşırı yüklemesi kullanır.
CA2009 : ImmutableCollection değeri üzerinde ToImmutableCollection çağrısı yapma ToImmutable yöntemi gereksiz yere System.Collections.Immutable ad alanından sabit bir koleksiyonda çağrıldı.
CA2011: Ayarlayıcı içinde özellik atama Bir özelliğe yanlışlıkla kendi kümesi erişimciiçinde bir değer atanmıştır.
CA2012: ValueTasks'i doğru kullanma Üye çağrılarından döndürülen ValueTask'ler doğrudan beklenmelidir. Bir ValueTask'i birden çok kez kullanma veya tamamlanmadan önce sonucuna doğrudan erişme girişimi bir özel durum veya bozulmaya neden olabilir. Böyle bir ValueTask'in yoksayılması büyük olasılıkla işlevsel bir hatanın göstergesidir ve performansı düşürebilir.
CA2013: ReferenceEquals'i değer türleri kullanmayın System.Object.ReferenceEqualskullanarak değerleri karşılaştırırken, objA ve objB değer türleriyse, ReferenceEquals yöntemine geçirilmeden önce kutulanırlar. Bu, hem objA hem de objB bir değer türünün aynı örneğini temsil etmese bile ReferenceEquals yönteminin yine de false döndürdüğü anlamına gelir.
CA2014: Döngülerde stackalloc kullanmayın. Stackalloc tarafından ayrılan yığın alanı yalnızca geçerli yöntemin çağrısının sonunda serbest bırakılır. Döngüde kullanmak, ilişkisiz yığın büyümesine ve nihai yığın taşma koşullarına neden olabilir.
CA2015: MemoryManager<T> türlerinden türetilen türler için sonlandırıcılar tanımlama MemoryManager<T> türetilmiş bir türe sonlandırıcı eklemek, Span<T>tarafından kullanılmaya devam ederken belleğin serbest olmasına izin verebilir.
CA2016: CancellationToken parametresini tek bir alan yöntemlere iletin CancellationToken parametresini, işlem iptal bildirimlerinin düzgün bir şekilde yayılmasını sağlamak için bir parametre alan yöntemlere iletin veya belirtecin kasıtlı olarak yayılmadığını belirtmek için açıkça CancellationToken.None geçirin.
CA2017: Parametre sayısı uyuşmazlığı Günlük iletisi şablonunda sağlanan parametre sayısı, adlandırılmış yer tutucu sayısıyla eşleşmiyor.
ca2018 : count için Buffer.BlockCopy bağımsız değişkeni, kopyalanacak bayt sayısını belirtmelidir Buffer.BlockCopykullanılırken, count bağımsız değişkeni kopyalanacak bayt sayısını belirtir. Öğeleri tam olarak bir bayt boyutunda olan dizilerde Array.Length bağımsız değişkeni için yalnızca count kullanmalısınız. byte, sbyteve bool dizileri tek bayt boyutunda öğelere sahiptir.
CA2019: ThreadStatic alanları satır içi başlatma kullanmamalıdır ThreadStaticAttribute ile açıklama ekleyen bir alan satır içinde veya açıkça bir static ( Visual Basic'teShared) oluşturucuda başlatılır.
CA2020: IntPtr/UIntPtr yerleşik işleçlerinin neden olduğu davranış değişikliğini önleme .NET 7'ye eklenen bazı yerleşik işleçler, .NET 6 ve önceki sürümlerdeki kullanıcı tanımlı işleçlerden farklı davranır. Taşma sırasında işaretsiz bağlam oluşturan bazı işleçler, denetlenen bağlam içinde sarmalanmadıkça artık oluşturmaz. Daha önce denetlenen bağlamı oluşturmamış olan bazı işleçler artık işaretlenmemiş bağlam içinde sarmalanmadığı sürece oluşturur.
< enumerable.Cast>T< veya Enumerable.OfType>T çağırmayın Enumerable.Cast<TResult>(IEnumerable) veya Enumerable.OfType<TResult>(IEnumerable) çağrısı, giriş koleksiyonunun türüyle uyumsuz bir tür parametresi belirtir.
CA2022: Stream ile uygun olmayan okuma yapmaktan kaçının.Okuma Stream.Read çağrısı istenenden daha az bayt döndürebilir ve sonuç olarak dönüş değeri işaretlenmemişse güvenilir olmayan kod elde edilir.
CA2023: İleti şablonunda geçersiz süslü parantezler Günlük mesaj şablonları, { ve } biçimindeki küme ayraçlarını, değerler için adlandırılmış yer tutucuları belirtmek amacıyla kullanır. İleti şablonlarında geçersiz küme ayracı kullanımı çalışma zamanı hatalarına veya beklenmeyen bir günlüğe kaydetme davranışına neden olabilir.
CA2024: StreamReader.EndOfStream'i zaman uyumsuz yöntemlerde kullanmayın StreamReader.EndOfStream özelliği, hiçbir veri arabelleğe alınmadığında istenmeyen zaman uyumlu engellemeye neden olabilir. Bunun yerine doğrudan StreamReader.ReadLineAsync() kullanın ve akışın sonuna ulaşıldığında null döndürür.
CA2025: Örnekleri beklenmeyen görevlere geçirmeyin IDisposable Bekletilmeyen IDisposable örneklerini kullanan görevler, bertaraf edildikten uzun süre sonra bu örnekleri kullanabilir. Örnekler elden çıkarılmadan önce örnekleri kullanan görevlerin tamamlandığından emin olun.
CA2026: JsonDocument.Parse() yerine JsonElement.Parse'i tercih edin. RootElement JsonElement.Parse öğesini doğrudan çağırmak, JsonDocument.Parse().RootElement öğesini çağırmaktan daha verimlidir.