Kod kalitesi kuralları

.NET kod analizi, kod kalitesini iyileştirmeyi hedefleyen kurallar sağlar. Kurallar tasarım, genelleştirme, performans ve güvenlik gibi alanlarda düzenlenmiştir. Bazı kurallar .NET API kullanımına özgüyken, diğerleri genel kod kalitesiyle ilgili.

Kurallar dizini

Aşağıdaki tabloda kod kalitesi çözümleme kuralları listeledik.

Kural Kimliği ve uyarı Description
CA1000: Genel türlerde statik üyeleri belirtme Bir jenerik türün statik bir üyesi çağrıldığında, tür için tür argümanı belirtilmelidir. Tür çıkarımını desteklemeyen bir jenerik örnek üyesi çağrıldığında, tür bağımsız değişkeni üye için belirtilmelidir. Bu iki durumda tür bağımsız değişkenini belirtmek için kullanılan sözdizimi farklıdır ve kolayca karıştırılabilir.
CA1001: Atılabilir alanlara sahip olan türler atılabilir olmalıdır Bir sınıf System.IDisposable tipi örnek alanını derler ve uygular ve sınıf IDisposable'ı uygulamaz. IDisposable alanını derleyen sınıf, yönetilmeyen kaynağı dolaylı yoldan sahiplenir ve IDisposable arayüzünü uygulamalıdır.
CA1002: Jenerik listeleri dışa açmayın System.Collections.Generic.List<(Of <(T>)>), devralma için değil performans için tasarlanmış genel bir koleksiyondur. Bu nedenle, Liste herhangi bir sanal üyeyi içermiyor. Bunun yerine, kalıtım için tasarlanmış genel koleksiyonlar sunulmalıdır.
CA1003: Genel olay işleyici örnekleri kullan Bir tür, void döndüren, imzasında iki parametre bulunan bir temsilci içerir; bu parametrelerden ilki bir nesnedir, ikincisi ise EventArgs'e atanabilir bir türdür ve içeren derleme Microsoft .NET Framework 2.0'ı hedefler.
CA1005: Genel türlerde aşırı parametrelerden kaçının Bir jenerik tür ne kadar fazla tür parametresi içerirse, her bir tür parametresinin neyi temsil ettiğini bilmek ve hatırlamak o kadar zor olur. Bu, genellikle tek tür parametresi olduğunda, List<T> örneğinde olduğu gibi, ve iki tür parametresi bulunan bazı durumlarda, Dictionary<TKey, TValue> örneğinde olduğu gibi açıktır. Ancak, iki parametreden fazla parametre varsa, birçok kullanıcı için zorluk derecesi artar.
CA1008: Enum'lar sıfır değerine sahip olmalı Başlatılmamış bir enum'un varsayılan değeri, diğer değer türlerinde olduğu gibi, sıfırdır. Flags özniteliği uygulanmamış bir numaralandırma, varsayılan değerin numaralandırmanın geçerli bir değeri olması için sıfır değerini kullanan bir üye tanımlamalıdır. FlagsAttribute özniteliği uygulanmış bir numaralandırma türü sıfır değerli bir üye tanımlıyorsa, numaralandırma türünde hiçbir değerin ayarlanmadığını belirtmek için bu üyenin adı "None" olmalıdır.
CA1010: Koleksiyonlar genel arabirim uygulamalıdır Bir koleksiyon kullanılabilirliğini genişletmek için genel koleksiyon arabirimlerinden birini uygulayın. Daha sonra koleksiyon genel koleksiyon türlerini doldurmak için kullanılabilir.
CA1012: Soyut türlerin ortak oluşturucuları olmamalıdır Soyut türlerin kurucuları yalnızca türetilmiş türler tarafından çağrılabilir. Genel yapıcılar bir türün örneklerini oluşturduğundan ve soyut bir türün örneği oluşturulamadığından, genel yapıcıya sahip bir soyut tür hatalı tasarlanmıştır.
CA1014: Derlemeleri CLSCompliantAttribute ile işaretleyin Ortak Dil Belirtimi (CLS), programlama dilleri arasında kullanılacaklarsa derlemelerin uyması gereken adlandırma kısıtlamalarını, veri türlerini ve kuralları tanımlar. İyi tasarım, tüm derlemelerin CLS uyumluluğunu CLSCompliantAttribute kullanarak açıkça belirtmesini gerektirir. Bu öznitelik bir derlemede yoksa, montaj uyumlu değildir.
CA1016: Derlemeleri AssemblyVersionAttribute ile işaretleyin .NET, bir derlemeyi benzersiz olarak tanımlamak ve kesin olarak adlandırılmış derlemelerdeki türlere bağlanmak için sürüm numarasını kullanır. Sürüm numarası, sürüm ve yayımcı ilkesi ile birlikte kullanılır. Varsayılan olarak uygulamalar yalnızca oluşturulmuş derleme sürümlerini çalıştırır.
CA1017: Derlemeleri ComVisibleAttribute ile işaretleyin ComVisibleAttribute COM müşterilerinin yönetilen koda nasıl erişeceğini tanımlar. İyi tasarım, derlemelerin COM görünürlüğünü açıkça belirtmesini gerektirir. COM görünürlüğü tüm derleme için ayarlanabilir ve sonra bireysel tür ve tür üyeleri için geçersiz kılınabilir. Bu öznitelik yoksa, derleme içeriği COM istemcileri tarafından görülebilir.
CA1018: Öznitelikleri AttributeUsageAttribute ile işaretleyin Özel öznitelik tanımladığınızda, AttributeUsageAttribute kullanarak özel öznitelik kaynak kodunun nerede uygulanabilir olduğunu göstermek için işaretleyin. Bir özniteliğin anlamı ve amaçlanan kullanımı, kodun içinde onun varolan konumunu tanımlar.
CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın Öznitelikler, bir hedefe uygulandıklarında belirtilmesi gereken zorunlu bağımsız değişkenleri tanımlayabilir. Ayrıca bunlar konum parametreleri olarak öznitelik yapıcısına verildiğinden duruma bağlı bağımsız değişkenler olarak da bilinirler. Her zorunlu bağımsız değişken için öznitelik, bağımsız değişkenin değerinin yürütme zamanında alınabilmesi amacıyla karşılık gelen salt okunur bir özellik de sağlamalıdır. Öznitelikler, adlandırılmış bağımsız değişkenler olarak da bilinen isteğe bağlı bağımsız değişkenleri de tanımlayabilir. Bu bağımsız değişkenler, öznitelik oluşturucularına adlarıyla iletilir ve karşılık gelen bir okuma/yazma özelliği olmalıdır.
CA1021: Out parametrelerinden kaçının Türleri başvuru olarak geçirmek (out veya ref kullanarak), işaretçiler konusunda deneyim sahibi olmayı, değer türleri ile referans türleri arasındaki farkı anlamayı ve birden çok dönüş değeri olan yöntemleri ele almayı gerektirir. Ayrıca, out ve ref parametreleri arasındaki fark açıkça anlaşılmadı.
CA1024: Uygun yerlerde özellikler kullanın Genel veya korumalı bir yöntemin adı "Get" ile başlar, parametre almaz ve dizi olmayan bir değer döndürür. Yöntem, bir özelliğe dönüştürülmek için iyi bir aday olabilir.
CA1027: Enum'ları FlagsAttribute ile işaretleyin Bir numaralandırma ilişkili adlandırılmış sabitler kümesini tanımlayan değer türüdür. Adlandırılmış sabitleri anlamlı bir şekilde birleştirilebiliyorsa, bir numaralandırmaya FlagsAttribute özniteliğini uygulayın.
CA1028: Enum depolama türü Int32 olmalıdır Bir numaralandırma ilişkili adlandırılmış sabitler kümesini tanımlayan değer türüdür. Varsayılan olarak, System.Int32 veri türü sabit değerleri depolamak için kullanılır. Bu temel türü değiştirebilirsiniz, ancak çoğu senaryoda bu gerekli değildir ve önerilmez.
CA1030: Uygun olduğunda olayları kullanın Bu kural, normalde olaylar için kullanılan adlara sahip yöntemleri algılar. Yanıt olarak açıkça tanımlanmış bir durum değişikliği yöntemi çağrılırsa, olay işleyicisi tarafından yöntemin çağrılması gerekir. Yöntemi doğrudan çağırmak yerine, yöntemi çağıran nesneler olay tetiklemelidir.
CA1031: Genel özel durum türlerini yakalamayın Genel istisnalar yakalanmamalıdır. Daha belirli bir istisnayı yakalayın veya genel istisnayı catch bloğundaki son ifade olarak yeniden fırlatın.
CA1032: Standart özel durum oluşturucuları uygulayın Oluşturucuların tam kümesinin sağlanmaması, özel durumların doğru şekilde işlenmesini zorlaştırabilir.
CA1033: Arabirim yöntemleri alt türler tarafından çağırılabilir olmalıdır Sealed olmayan, dışarıdan görünür bir tür, ortak bir arabirimin açık bir yöntem uygulamasını sağlar ve aynı ada sahip, dışarıdan görünür alternatif bir yöntem sağlamaz.
CA1034: İç içe türler görünür olmamalıdır İç içe tür, başka bir türün kapsamında bildirilen bir türdür. İç içe geçmiş türler, kapsayan türün özel uygulama ayrıntılarını kapsüllemek için kullanışlıdır. Bu amaçla kullanıldığında, iç içe türler dışarıdan görünür olmamalıdır.
CA1036: Karşılaştırılabilir türlerde yöntemleri geçersiz kılın Ortak veya korumalı tür System.IComparable arabirimini uygular. Object.Equals yöntemini geçersiz kılmaz ve eşitlik, eşitsizlik, küçüktür veya büyüktür için dile özgü işleci de aşırı yüklemez.
CA1040: Boş arabirimlerden kaçının Arayüzler bir davranış veya kullanım sözleşmesi sağlayan üyeleri tanımlar. Arabirim tarafından tanımlanan fonksiyonellik herhangi bir tür tarafından türün kalıtım hiyerarşisinde nerede belirdiği önemsenmeksizin devralınabilir. Bir tür, bir arabirimi, arabirimin üyelerinin uygulamalarını sağlayarak uygular. Boş bir arabirim herhangi bir üye tanımlamıyor; bu nedenle, uygulanabilir bir sözleşme tanımlamaz.
CA1041: ObsoleteAttribute iletisini belirtin Bir tür veya üye, ObsoleteAttribute.Message özelliği belirtilmemiş bir System.ObsoleteAttribute özniteliği kullanılarak işaretlenir. ObsoleteAttribute kullanılarak işaretlenen bir tür veya üye derlendiğinde, özniteliğin Message özelliği görüntülenir. Bu, kullanıcıya kullanım dışı tür veya üye hakkında bilgi sağlar.
CA1043: Dizin oluşturucular için tamsayı veya dize bağımsız değişkeni kullanın Dizin oluşturucular (yani dizinlenmiş özellikler), dizin için tam sayı veya dize türlerini kullanmalıdır. Bu türler, genellikle veri yapılarını dizinleme için kullanılır ve bunlar kitaplığın kullanılabilirliğini artırır. Object türünün kullanımı, belirli bir tamsayı veya dize türünün tasarım zamanında belirtilemediği durumlarla sınırlandırılmalıdır.
CA1044: Özellikler salt yazılabilir olmamalıdır Salt okunur bir özelliğin bulunması kabul edilebilir ve çoğu zaman gerekli olsa da, tasarım yönergeleri salt yazılır özelliklerin kullanılmasını yasaklar. Bunun nedeni, bir kullanıcının bir değer belirlemesine izin verip ardından kullanıcının bu değeri görüntülemesini engellemenin hiçbir güvenlik sağlamamasıdır. Ayrıca, okuma erişimi olmadan paylaşılan nesnelerin durumu görüntülenemez; bu da kullanışlılıklarını sınırlar.
CA1045: Türleri referans olarak geçirmeyin Türleri başvuru yoluyla geçirmek (out veya ref kullanarak), işaretçiler konusunda deneyim sahibi olmayı, değer türleri ile referans türleri arasındaki farkları anlamayı ve birden çok dönüş değeri olan yöntemleri ele almayı gerektirir. Genel bir kitleye yönelik tasarım yapan kitaplık mimarları, kullanıcıların out veya ref parametreleriyle çalışma konusunda uzmanlaşmasını beklememelidir.
CA1046: Referans türlerinde eşittir işlecini aşırı yüklemeyin Referans türleri için, eşitlik işlecinin varsayılan uygulaması neredeyse her zaman uygundur. Varsayılan olarak, iki referans ancak aynı nesneyi işaret ediyorsa eşittir.
CA1047: Korumalı türlerde korunan üyeleri bildirmeyin Türler, türeyen türlerin üyeye erişebilmesi veya onu geçersiz kılabilmesi için korumalı üyeler bildirir. Tanım gereği, mühürlenmiş türler devralınamaz yani mühürlenmiş türler üzerindeki korunan yöntemler çağrılamaz.
CA1050: Ad alanlarında türleri bildirin Türler, ad çakışmalarını önlemek ve ilgili türleri bir nesne hiyerarşisi içinde düzenlemenin bir yolu olarak ad alanlarında bildirilir.
CA1051: Görünür örnek alanlarını bildirmeyin Bir alanın birincil kullanım alanının uygulama ayrıntısı olması gerekir. Alanlar private veya internal olmalı ve özellikler aracılığıyla erişime açılmalıdır.
CA1052: Statik tutucu türleri mühürlenmelidir Ortak veya korumalı tür yalnızca statik üyeleri içerir ve mühürlenmiş (C# Reference) (NotInheritable) değiştirici kullanarak bildirilmez. Kalıtım alınması amaçlanmayan bir tür, temel tür olarak kullanılmasını önlemek için sealed değiştiricisiyle işaretlenmelidir.
CA1053: Statik tutucu türlerinde oluşturucular bulunmamalıdır Genel veya iç içe genel bir tür, yalnızca statik üyeler içerir ve genel veya korumalı bir varsayılan oluşturucuya sahiptir. Statik üyeleri çağırmak, türün bir örneğini gerektirmediğinden oluşturucu gereksizdir. Dize aşırı yüklemesi, emniyet ve güvenlik için dize bağımsız değişkenini kullanarak URI aşırı yüklemesini çağırmalıdır.
CA1054: URI parametreleri dizeler olmamalıdır Bir yöntem bir URI’nin dize gösterimini alıyorsa, bu hizmetleri güvenli ve emniyetli bir şekilde sağlayan URI sınıfının bir örneğini alan ilgili bir aşırı yükleme de sağlanmalıdır.
CA1055: URI dönüş değerleri dizeler olmamalıdır Bu kural, yöntemin URI döndürdüğünü varsayar. Bir URI’nin dize gösterimi, ayrıştırma ve kodlama hatalarına açıktır ve güvenlik açıklarına yol açabilir. System.Uri sınıfı bu hizmetleri güvenli bir şekilde sağlar.
CA1056: URI özellikleri dize olmamalıdır Bu kural, özelliğin Tekdüzen Kaynak Tanımlayıcısı (URI) tarafından temsil edildiğini varsayar. Bir URI’nin dize gösterimi, ayrıştırma ve kodlama hatalarına açıktır ve güvenlik açıklarına yol açabilir. System.Uri sınıfı bu hizmetleri güvenli bir şekilde sağlar.
CA1058: Türler belli temel türleri genişletmemelidir Dışarıdan görünen tür belirli temel türleri genişletir. Diğer seçenekleri kullanın.
CA1060: P/Invokes öğesini NativeMethods sınıfına taşıyın System.Runtime.InteropServices.DllImportAttribute özniteliği kullanılarak işaretlenenler gibi Platform Çağırma yöntemleri veya Visual Basic'te Declare anahtar sözcüğü kullanılarak tanımlanan yöntemler, yönetilmeyen koda erişir. Bu yöntemler, NativeMethods, SafeNativeMethods veya UnsafeNativeMethods sınıfının üyesi olmalıdır.
CA1061: Taban sınıf yöntemlerini gizlemeyin Temel türdeki bir yöntem, türetilmiş türde aynı ada sahip bir yöntem tarafından gizlenir; bu durum, türetilmiş yöntemin parametre imzası yalnızca, temel yöntemin parametre imzasındaki karşılık gelen türlere göre daha az türetilmiş türler bakımından farklı olduğunda gerçekleşir.
CA1062: Ortak yöntemlerin parametrelerini doğrulayın Dışarıya açık yöntemlere geçirilen tüm referans bağımsız değişkenleri null olup olmadıklarına karşı denetlenmelidir.
CA1063: IDisposable'ı doğru uygulayın Tüm IDisposable türleri Dispose kalıbını doğru uygulamalıdır.
CA1064: Özel durumlar genel olmamalıdır Bir iç özel durum yalnızca kendi iç kapsamı içinde görülebilir. İstisna iç kapsamın dışına çıktıktan sonra, bu istisnayı yakalamak için yalnızca temel istisna kullanılabilir. İç özel durum , Exceptionveya SystemExceptionöğesinden ApplicationExceptiondevralındıysa, dış kod özel durumla ne yapacağını bilmek için yeterli bilgiye sahip olmaz.
CA1065: Beklenmedik konumlarda özel durumlar tetiklemeyin İstisna atılmasını beklemeyen yöntem bir istisna atar.
CA1066: Equals geçersiz kılınırken IEquatable uygulayın Bir değer türü yöntemini geçersiz kılar Equals , ancak uygulamaz IEquatable<T>.
CA1067: IEquatable'ı uygularken Eşittir'i geçersiz kılma Bir tür, IEquatable<T> uygular, ancak Equals yöntemini geçersiz kılmaz.
CA1068: CancellationToken parametreleri en son gelmelidir Yöntem, son parametre olmayan bir CancellationToken parametresine sahiptir.
CA1069: Enum'lar yinelenen değerlere sahip olmamalıdır Bir numaralandırmanın, açıkça aynı sabit değere atanmış birden çok üyesi vardır.
CA1070: Olay alanlarını sanal olarak bildirmeyin Alan benzeri bir olay sanal olarak bildirildi.
CA1200: Ön ekli cref etiketlerini kullanmaktan kaçının XML belge etiketindeki cref özniteliği "kod başvurusu" anlamına gelir. Etiketin iç metninin tür, yöntem veya özellik gibi bir kod öğesi olduğunu belirtir. Derleyicinin başvuruları doğrulamasını engellediği için `cref` etiketlerini ön eklerle kullanmaktan kaçının. Ayrıca, Visual Studio tümleşik geliştirme ortamının (IDE) yeniden düzenleme sırasında bu sembol başvurularını bulmasını ve güncelleştirmesini engeller.
CA1303: Harfleri yerelleştirilmiş parametreler olarak göndermeyin Dışarıdan erişilebilen bir yöntem, bir .NET oluşturucusuna veya yöntemine parametre olarak bir dize sabiti geçirir ve bu dizenin yerelleştirilebilir olması gerekir.
CA1304: CultureInfo belirtin Bir yöntem veya oluşturucu, System.Globalization.CultureInfo parametresini kabul eden bir aşırı yüklemesi olan bir üyeyi çağırır; ancak yöntem veya oluşturucu, CultureInfo parametresini alan aşırı yüklemeyi çağırmaz. Bir CultureInfo veya System.IFormatProvider nesnesi sağlanamadığında, aşırı yüklü üye tarafından sağlanan varsayılan değer, tüm yerel ayarlarda istediğiniz etkiyi vermeyebilir.
CA1305: IFormatProvider belirtin Bir yöntem veya oluşturucu, System.IFormatProvider parametresini kabul eden aşırı yüklemeleri olan bir veya daha fazla üyeyi çağırır ve yöntem veya oluşturucu, IFormatProvider parametresini alan aşırı yüklemeyi çağırmaz. Bir System.Globalization.CultureInfo veya IFormatProvider nesnesi sağlanamadığında, aşırı yüklü üye tarafından sağlanan varsayılan değer, tüm yerel ayarlarda istediğiniz etkiyi vermeyebilir.
CA1307: Netlik için StringComparison belirtin Bir dize karşılaştırma işlemi, StringComparison parametresi belirtmeyen bir yöntem aşırı yüklemesi kullanır.
CA1308: Dizeleri büyük harfe normalleştirin Dizeler büyük harfe normalleştirilmeli. Küçük bir karakter grubu küçük harfe dönüştürüldüğünde gidiş dönüş yapamaz.
CA1309: Sıralı StringComparison kullanın Dilbilimsel olmayan bir dize karşılaştırma işlemi, StringComparison parametresini Ordinal veya OrdinalIgnoreCase olarak ayarlamaz. Açıkça StringComparison.Ordinal veya StringComparison.OrdinalIgnoreCase için parametre ayarıyla kodunuz genellikle hızlanır, daha doğru olur ve daha güvenilir hale gelir.
CA1310: Doğruluk için StringComparison belirtin Bir dize karşılaştırma işlemi, StringComparison parametresi belirtmeyen ve varsayılan olarak kültüre özgü dize karşılaştırması kullanan aşırı yüklenmiş bir yöntem kullanır.
CA1311: Bir kültür belirtin veya sabit bir sürüm kullanın ToUpper veya ToLower çağrılırken geçerli kültüre örtük bağımlılığı önlemek için bir kültür belirtin ya da değişmez kültür kullanın.
CA1401: P/Invoke'lar görünür olmamalıdır Ortak türdeki genel veya korumalı bir yöntem System.Runtime.InteropServices.DllImportAttribute özniteliğine sahiptir (Visual Basic'te Declare anahtar sözcüğü tarafından da uygulanır). Bu tür yöntemler açıkta kalmamalıdır.
CA1416: Platform uyumluluğunu doğrulama Bir bileşende platforma bağımlı API'ler kullanıldığında kod artık tüm platformlarda çalışmaz.
CA1417: P/Invokes için dize parametrelerinde kullanmayın OutAttribute OutAttribute ile değer olarak geçirilen dize parametreleri, dize intern edilmiş bir dizeyse çalışma zamanını kararsız hâle getirebilir.
CA1418: Geçerli platform dizesini kullanma Platform uyumluluk çözümleyicisi geçerli bir platform adı ve sürümü gerektirir.
CA1419: Türetilen beton türleri için içeren tür kadar görünür bir parametresiz oluşturucu sağlayın System.Runtime.InteropServices.SafeHandle System.Runtime.InteropServices.SafeHandle öğesinden türetilen bir tür için, kapsayan tür kadar görünür olan parametresiz bir oluşturucu sunmak, kaynak üreteci tabanlı birlikte çalışma çözümleriyle daha iyi performans ve kullanım olanağı sağlar.
CA1420: Özellik, tür veya öznitelik çalışma zamanında sıralama gerektirir Çalışma zamanı hazırlama devre dışı bırakıldığında çalışma zamanı hazırlama gerektiren özelliklerin kullanılması çalışma zamanı özel durumlarına neden olur.
CA1421: DisableRuntimeMarshallingAttribute uygulandığında yöntem çalışma zamanı sıralamasını kullanır Bir yöntem çalışma zamanı sıralamasını kullanır ve çalışma zamanı sıralaması açıkça devre dışı bırakılmıştır.
CA1422: Platform uyumluluğunu doğrulama Belirli bir işletim sisteminde (sürüm) kullanılmayan bir API'yi bu işletim sisteminden (sürüm) erişilebilen bir çağrı sitesinden çağırmak önerilmez.
CA1501: Aşırı devralmadan kaçının Bir tür, devralma hiyerarşisinde dört düzeyden daha derindedir. İç içe yuvalanmış hiyerarşileri izlemek, anlamak ve muhafaza etmek zor olabilir.
CA1502: Aşırı karmaşıklıktan kaçının Bu kural, yöntem içindeki doğrusal olarak bağımsız yolların sayısını ölçer; bu sayı, koşullu dallanmaların sayısı ve karmaşıklığı tarafından belirlenir.
CA1505: Bakımı yapılamayan kodlardan kaçının Bir tipin veya yöntemin bakım yapılabilirlik dizini değeri düşüktür. Düşük bir bakım yapılabilirlik endeksi, bir türün veya yöntemin bakımının muhtemelen zor olduğunu ve yeniden tasarlanmak için iyi bir aday olduğunu gösterir.
CA1506: Aşırı sınıf bağlantısından kaçının Bu kural, bir türün veya yöntemin içerdiği benzersiz tür başvurularının sayısını hesaplayarak sınıf bağımlılığını ölçer.
CA1507: Dize yerine nameof kullanın Bir nameof ifadesinin kullanılabileceği yerde argüman olarak bir dize sabiti kullanılıyor.
CA1508: Geçersiz koşullu koddan kaçının Bir yöntemde, çalışma zamanında her zaman true veya false olarak değerlendirilen koşullu kod bulunur. Bu, koşulun false dalında ölü koda yol açar.
CA1509: Kod ölçümleri yapılandırma dosyasında geçersiz giriş CA1501, CA1502, CA1505 ve CA1506 gibi kod ölçümü kurallarına, geçersiz bir giriş içeren CodeMetricsConfig.txt adlı bir yapılandırma dosyası sağlandı.
CA1510: ArgumentNullException fırlatma yardımcısını kullanın Throw yardımcıları, yeni bir özel durum örneği oluşturan if bloklarından daha basit ve daha verimlidir.
CA1511: ArgumentException oluşturma yardımcısını kullanın Özel durum fırlatma yardımcıları, yeni bir özel durum örneği oluşturan if bloklarından daha basit ve daha verimlidir.
CA1512: ArgumentOutOfRangeException oluşturma yardımcı yöntemini kullanın Throw yardımcıları, yeni bir özel durum nesnesi oluşturan if bloklarından daha basit ve daha verimlidir.
CA1513: ObjectDisposedException throw helper kullanın Throw helper'lar, yeni bir özel durum örneği oluşturan if bloklardan daha basit ve daha verimlidir.
CA1514: Gereksiz uzunluk argümanı kullanmaktan kaçının Bir dizenin veya arabelleğin sonuna kadar dilimleme yapılırken gereksiz bir uzunluk bağımsız değişkeni kullanılır. Hesaplanan uzunluk hataya açık olabilir ve ayrıca gereksizdir.
CA1515: Genel türleri dahili hale getirebilirsiniz Sınıf kitaplığının aksine, bir uygulamanın API'lerine genel olarak başvurulmuyor, bu nedenle türler iç olarak işaretlenebilir.
CA1516: Platformlar arası iç bilgileri kullanma Bu kural, bunun yerine eşdeğer bir platformlar arası iç değerle değiştirilebilen platforma özgü iç özelliklerin kullanımını algılar.
CA1700: Enum değerlerini 'Reserved' olarak adlandırmayın Bu kural, adında "reserved" geçen bir numaralandırma üyesinin şu anda kullanılmadığını, ancak gelecekteki bir sürümde yeniden adlandırılmak veya kaldırılmak üzere bir yer tutucu olduğunu varsayar. Bir üyenin adını değiştirmek veya onu kaldırmak, geriye dönük uyumluluğu bozan bir değişikliktir.
CA1707: Tanımlayıcılar alt çizgi içermemelidir Kural gereği, tanımlayıcı adlar alt çizgi (_) karakterini içermez. Bu kural ad alanlarını, türleri, üyeleri ve parametreleri denetler.
CA1708: Tanımlayıcılar yalnızca büyük/küçük harf farkından daha fazla farklılık göstermelidir Ortak dil çalışma zamanı hedef dilleri büyük/küçük harf duyarlı olması gerekmediğinden ad alanları, türler, üyeler ve parametreler için tanımlayıcılar yalnızca büyük/küçük harfe göre farklılık göstermeyebilir.
CA1710: Tanımlayıcılar uygun soneke sahip olmalıdır Gelenek gereği, belirli temel türleri genişleten, belirli arabirimleri uygulayan veya bu türlerden türetilen türlerin adları, temel tür veya arabirimle ilişkilendirilen bir sonek taşır.
CA1711: Tanımlayıcılar yanlış sonek içermemelidir Kural gereği, yalnızca, belirli temel türleri genişleten veya bazı arabirimleri ya da bu türlerinden türetilmiş türleri uygulayan tür adları belirli ayrılmış öneklerle bitmelidir. Diğer tür adları bu ayrılmış son ekleri kullanmamalıdır.
CA1712: Enum değerlerinin başına tür adını getirmeyin Numaralandırma üyelerinin adları, tür adıyla öneklenmez; çünkü geliştirme araçlarının tür bilgisi sağlaması beklenir.
CA1713: Olaylarda önce veya sonra önek olmamalıdır Olay adı "Önce" veya "Sonra" ile başlar. Belirli bir sırada tetiklenen ilgili olayları adlandırırken, eylem dizisindeki göreli konumu belirtmek için şimdiki ya da geçmiş zamanı kullanın.
CA1714: Bayrak numaralandırmalarında çoğul adlar olmalıdır Ortak bir numaralandırma System.FlagsAttribute özniteliğine sahiptir ve adı "s" ile bitmez. FlagsAttribute kullanılarak işaretlenen türlerin adları çoğuldur; çünkü bu öznitelik birden fazla değerin belirtilebileceğini gösterir.
CA1715: Tanımlayıcıların önekleri doğru olmalıdır Dışarıdan görünen bir arabirimin adı büyük "I" ile başlamıyor. Dışarıdan görünür bir tür veya yöntem üzerindeki genel tür parametresinin adı büyük "T" harfiyle başlamıyor.
CA1716: Tanımlayıcılar anahtar sözcüklerle eşleşmemelidir Bir ad alanı adı veya tür adı, bir programlama dilindeki ayrılmış bir anahtar sözcükle aynıdır. Ad alanları ve türler için tanımlayıcılar, ortak dil çalışma zamanını hedefleyen diller tarafından tanımlanan anahtar sözcüklerle aynı olmamalıdır.
CA1717: Yalnızca FlagsAttribute enum'ları çoğul isimlere sahip olmalıdır Adlandırma kuralları, bir numaralandırma türü için çoğul bir ad kullanılmasının, bu numaralandırma türünün birden fazla değerinin aynı anda belirtilebileceğini gösterdiğini belirtir.
CA1720: Tanımlayıcılar tür adları içermemelidir Dışarıdan görünen bir üyedeki parametrenin adı bir veri türü adı içeriyorsa veya dışarıdan görünen bir üyenin adı dile özgü bir veri türü adı içeriyorsa.
CA1721: Özellik adları get metotlarıyla eşleşmemelidir Genel veya korumalı bir üyenin adı "Get" ile başlar ve bunun dışında genel veya korumalı bir özelliğin adıyla eşleşir. "Get" yöntemleri ve özellikleri, işlevlerini açıkça ayırt eden adlara sahip olmalıdır.
CA1724: Tür Adları Ad Alanlarıyla Eşleşmemelidir Tür adları .NET ad alanlarının adlarıyla eşleşmemelidir. Bu kuralın ihlali kitaplığın kullanılabilirliğini azaltabilir.
CA1725: Parametre adları temel bildirimle eşleşmelidir Geçersiz kılma hiyerarşisinde parametrelerin tutarlı şekilde adlandırılması, metot geçersiz kılmalarının kullanılabilirliğini artırır. Türetilmiş bir yöntemdeki, temel bildirideki addan farklı olan bir parametre adı, bu yöntemin temel yöntemi geçersiz kılan bir geçersiz kılma mı yoksa yöntemin yeni bir aşırı yüklemesi mi olduğu konusunda karışıklığa neden olabilir.
CA1727: Adlandırılmış yer tutucular için PascalCase kullanma Günlük mesajı şablonundaki adlandırılmış yer tutucular için PascalCase kullanın.
CA1801: Kullanılmayan parametreleri gözden geçir Yöntem imzası, yöntemin gövdesinde kullanılmayan bir parametre içerir.
CA1802: Uygun Olduğunda Sabit Değerler Kullanın Alan statik ve salt okunur olarak bildirilir (Visual Basic'te Paylaşılan ve Salt Okunur) ve derleme zamanında hesaplanabilir bir değer kullanılarak başlatılır. Hedeflenen alana atanan değer derleme zamanında hesaplanabilir olduğundan, değerin çalışma zamanı yerine derleme zamanında hesaplanabilmesi için bildirimi bir const (Visual Basic'te Const) alanıyla değiştirin.
CA1805: Gereksiz yere başlatmayın .NET çalışma zamanı, oluşturucuyu çalıştırmadan önce başvuru türlerinin tüm alanlarını varsayılan değerlerine başlatır. Çoğu durumda, bir alanı varsayılan değeriyle açıkça başlatmak gereksizdir; bu, bakım maliyetlerini artırır ve performansı düşürebilir (örneğin assembly boyutunun artması gibi).
CA1806: Yöntem sonuçlarını yok saymayın Yeni bir nesne oluşturulur ancak hiç kullanılmaz; ya da yeni bir dize oluşturan ve döndüren bir yöntem çağrılır, ancak bu yeni dize hiç kullanılmaz; ya da bir COM veya P/Invoke yöntemi bir HRESULT ya da hata kodu döndürür, ancak bu değer hiç kullanılmaz.
CA1810: Referans türü statik alanlarını satır içinde başlatın Bir tür açıkça tanımlanmış bir statik oluşturucu bildirdiğinde, tam zamanında derlenen (JIT) derleyici, statik oluşturucunun daha önce çağrıldığından emin olmak için türün her statik yöntemine ve örnek oluşturucusuna bir denetim ekler. Statik oluşturucu denetimleri performansı düşürebilir.
CA1812: Örneklendirilmemiş iç sınıflardan kaçının Bir derleme düzeyi türünün örneği, derleme içindeki kod tarafından oluşturulmaz.
CA1813: Korumasız özniteliklerden kaçının .NET, özel öznitelikleri almak için yöntemler sağlar. Varsayılan olarak, bu yöntemler öznitelik devralma hiyerarşisinde arama yapar. Öznitelik mühürleme kalıtım hiyerarşisi aracılığıyla aramayı ortadan kaldırır ve performansı artırabilir.
CA1814: Basit dizileri çok boyutlu dizilere tercih edin Düzensiz dizi, öğeleri dizi olan bir dizidir. Öğeleri oluşturan diziler farklı boyutlarda olabilir; bu da bazı veri kümeleri için daha az alan israfına yol açar.
CA1815: Değer türlerinde Equals yöntemini ve eşitlik işlecini geçersiz kılın Değer türleri için, Equals'ın devralınmış uygulaması Reflection kitaplığını kullanır ve türdeki tüm alanların içeriğini karşılaştırır. Yansıma hesaplama açısından maliyetlidir ve her alanı eşitlik açısından karşılaştırmak gereksiz olabilir. Kullanıcıların örnekleri karşılaştırmasını veya sıralamasını ya da örnekleri karma tablo anahtarı olarak kullanmasını bekliyorsanız, değer türünüz Equals yöntemini uygulamalıdır.
CA1816: GC.SuppressFinalize öğesini doğru çağırın Dispose’un bir uygulaması olan bir yöntem GC.SuppressFinalize çağırmıyorsa; veya Dispose’un bir uygulaması olmayan bir yöntem GC.SuppressFinalize çağırıyorsa; ya da bir yöntem GC.SuppressFinalize çağırıp this dışında bir şey geçiriyorsa (Visual Basic’te Me).
CA1819: Özellikler diziler döndürmemelidir Özelliklerin döndürdüğü diziler, özellik salt okunur olsa bile yazmaya karşı korumalı değildir. Dizinin kurcalamaya karşı korumalı kalması için, özellik dizinin bir kopyasını döndürmelidir. Genellikle kullanıcılar, böyle bir özelliği çağırmanın performans üzerindeki olumsuz etkilerini anlamaz.
CA1820: Dize uzunluğunu kullanarak boş dizeler için sınayın Dizeleri String.Length özelliğini veya String.IsNullOrEmpty yöntemini kullanarak karşılaştırmak, Equals yöntemini kullanmaya göre önemli ölçüde daha hızlıdır.
CA1821: Boş sonlandırıcıları kaldırın Mümkün olduğunda, nesnenin yaşam süresini izlemenin getirdiği ek performans yükü nedeniyle sonlandırıcılardan kaçının. Boş bir sonlandırıcı ek yük oluşturur ve hiçbir fayda sağlamaz.
CA1822: Üyeleri statik olarak işaretleyin Örnek verilerine erişmeyen veya örnek yöntemlerini çağırmayan üyeler statik olarak işaretlenebilir (Visual Basic'te paylaşılan). Yöntemleri statik olarak işaretledikten sonra derleyici, bu üyelere yönelik sanal olmayan çağrı noktaları oluşturur. Bu, performansa duyarlı kodlar için ölçülebilir bir performans artışı sağlayabilir.
CA1823: Kullanılmayan özel alanlardan kaçının Derlemede erişimi görülmeyen özel alanlar algılandı.
CA1824: Derlemeleri NeutralResourcesLanguageAttribute ile işaretleyin NeutralResourcesLanguage özniteliği, bir derleme için nötr bir kültürün kaynaklarını görüntülemek için kullanılan dilin kaynak yöneticisini bilgilendirir. Bu ilk yüklediğiniz kaynak için arama performansını artırır ve çalışma kümenizi azaltabilir.
CA1825: Sıfır uzunluklu dizi ayırmalarından kaçının Sıfır uzunluklu bir dizinin başlatılması gereksiz bellek ayırmaya neden olur. Bunun yerine çağırarak Array.Emptystatik olarak ayrılmış boş dizi örneğini kullanın. Bellek ayırma, bu yöntemin tüm çağrılarında paylaşılır.
CA1826: Linq Enumerable yöntemi yerine özelliği kullanın Enumerable LINQ yöntemi, eşdeğer, daha verimli bir özelliği destekleyen bir tür üzerinde kullanıldı.
CA1827: Any kullanılabildiğinde Count/LongCount kullanmayın Count veya LongCount yöntemin daha verimli olacağı bir yöntem Any kullanılmıştır.
CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın CountAsync veya LongCountAsync yöntemin daha verimli olacağı bir yöntem AnyAsync kullanılmıştır.
CA1829: Enumerable.Count yöntemi yerine Length/Count özelliğini kullanın Count LINQ yöntemi eşdeğer, daha verimli Length veya Count özelliği destekleyen bir tür üzerinde kullanılmıştır.
CA1830: StringBuilder'da kesin türdeki Ekleme ve Ekleme yöntemi aşırı yüklemelerini tercih edin Append ve Insert dışındaki Stringbirden çok tür için aşırı yüklemeler sağlar. Mümkün olduğunda, ToString() ve dize tabanlı aşırı yükleme yerine kesin türdeki aşırı yüklemeleri tercih edin.
CA1831: Uygun olduğunda dize için Aralık tabanlı dizin oluşturucular yerine AsSpan kullanın Bir dize üzerinde aralık dizin oluşturucu kullanırken ve değer örtük olarak ReadOnlySpan<char> türüne atanırken, string’in istenen bölümünün bir kopyasını oluşturan Slice yerine Substring yöntemi kullanılır.
CA1832: Bir dizinin ReadOnlySpan veya ReadOnlyMemory bölümünü almak için Aralık tabanlı dizin oluşturucular yerine AsSpan veya AsMemory kullanın Bir dizide aralık dizin oluşturucu kullanıldığında ve değer örtük olarak bir ReadOnlySpan<T> veya ReadOnlyMemory<T> türüne atandığında, dizinin istenen bölümünün bir kopyasını oluşturan Slice yerine GetSubArray yöntemi kullanılır.
CA1833: Bir dizinin Span veya Memory bölümünü almak için Aralık tabanlı dizin oluşturucular yerine AsSpan veya AsMemory kullanın Bir dizi üzerinde aralık dizinleyicisi kullanıldığında ve değer örtük olarak bir Span<T> veya Memory<T> türüne atandığında, dizinin istenen bölümünün bir kopyasını oluşturan Slice yerine GetSubArray yöntemi kullanılır.
CA1834: Tek karakterli dizeler için StringBuilder.Append(char) kullanın StringBuilder, bağımsız değişken olarak char alan bir Append aşırı yüklemesine sahiptir. Performans nedeniyle char aşırı yüklemesini çağırmayı tercih edin.
CA1835: Memory tabanlı aşırı yüklemeleri ReadAsync ve WriteAsync için tercih edin Stream, ilk bağımsız değişkeni olarak bir ReadAsync alan bir Memory<Byte> aşırı yüklemesine ve ilk bağımsız değişkeni olarak bir WriteAsync alan bir ReadOnlyMemory<Byte> aşırı yüklemeye sahiptir. Daha verimli olan bellek tabanlı aşırı yüklemeleri çağırmayı tercih edin.
CA1836: Kullanılabiliyorsa Count yerine IsEmpty tercih edin Nesnenin herhangi bir öğe içerip içermediğini belirlemek için, Count, Length, Count<TSource>(IEnumerable<TSource>) veya LongCount<TSource>(IEnumerable<TSource>) yerine daha verimli olan IsEmpty özelliğini tercih edin.
CA1837: Process.GetCurrentProcess().Id yerine Environment.ProcessId kullanın Environment.ProcessId , değerinden Process.GetCurrentProcess().Iddaha basit ve daha hızlıdır.
CA1838: P/Invokes parametrelerinden kaçının StringBuilder Marshalling işlemi StringBuilder her zaman yerli bir arabellek kopyası oluşturur ve bu da tek bir marshalling işlemi için birden çok ayırmaya neden olur.
CA1839: Process.GetCurrentProcess() yerine Environment.ProcessPath kullanın. MainModule.FileName Environment.ProcessPath , değerinden Process.GetCurrentProcess().MainModule.FileNamedaha basit ve daha hızlıdır.
CA1840: Thread.CurrentThread.ManagedThreadId yerine Environment.CurrentManagedThreadId kullanın Environment.CurrentManagedThreadId değerinden Thread.CurrentThread.ManagedThreadIddaha kompakt ve verimlidir.
CA1841: Sözlük İçeren yöntemleri tercih edin Keys veya Values koleksiyonunda Contains çağrısı yapmak, çoğu zaman sözlüğün kendisinde ContainsKey veya ContainsValue çağrısı yapmaktan daha maliyetli olabilir.
CA1842: Tek bir görevle kullanmayın WhenAll Tek bir görevle kullanmak WhenAll performans kaybına neden olabilir. Bunun yerine görevi bekleyin veya döndürün.
CA1843: Tek bir görevle kullanmayın WaitAll Tek bir görevle kullanmak WaitAll performans kaybına neden olabilir. Bunun yerine görevi bekleyin veya döndürün.
CA1844: Alt sınıflama sırasında zaman uyumsuz yöntemlerin bellek tabanlı geçersiz kılmalarını sağlayın Stream Performansı geliştirmek için alt sınıflarken Streambellek tabanlı zaman uyumsuz yöntemleri geçersiz kılın. Ardından dizi tabanlı yöntemleri bellek tabanlı yöntemler açısından uygulayın.
CA1845: Span tabanlı kullanın string.Concat Substring ve bir birleştirme işleci yerine AsSpan ve string.Concat kullanmak daha verimlidir.
CA1846: Substring yerine AsSpan tercih edin AsSpan, Substring'den daha verimlidir. Substring bir O(n) dize kopyası gerçekleştirir, ancak AsSpan gerçekleştirmez ve sabit bir maliyeti vardır. AsSpan ayrıca herhangi bir yığın ayırması gerçekleştirmez.
CA1847: Tek karakter araması için char değişmez değeri kullanmak Tek bir karakter aramak yerine String.Contains(char) kullanınString.Contains(string).
CA1848: LoggerMessage temsilcilerini kullanma Daha iyi performans için LoggerMessage delegeleri kullanın.
CA1849: Zaman uyumsuz bir yöntem içindeyken zaman uyumsuz yöntemleri çağırın Zaten eşzamansız olan bir yöntemde, diğer yöntemlere yapılan çağrılar varsa bunların eşzamansız sürümlerine yapılmalıdır.
CA1850: ComputeHash yerine statik HashData yöntemini tercih edin ComputeHash çağırmak için bir HashAlgorithm örneği oluşturup yönetmek yerine statik HashData yöntemini kullanmak daha verimlidir.
CA1851: Olası birden çok koleksiyon numaralandırması IEnumerable IEnumerable koleksiyonunun birden çok kez yinelenmesi mümkün olabilir. Birden çok numaralandırmayı önleyen bir uygulama kullanmayı göz önünde bulundurun.
CA1852: İç türleri mühürleme Derlemesi dışında erişilmeyen ve içeren derleme içinde alt türü olmayan bir tür mühürlenmez.
CA1853: Gereksiz çağrı Dictionary.ContainsKey(key) Dictionary.ContainsKey(key) ile Dictionary.Remove(key) korumaya gerek yoktur. Dictionary<TKey,TValue>.Remove(TKey) zaten anahtarın var olup olmadığını denetler ve yoksa atamaz.
CA1854: Yöntemini tercih edin IDictionary.TryGetValue(TKey, out TValue) TryGetValue öğesini, bir ContainsKey kontrolüyle korunan sözlük dizin erişimine tercih edin. ContainsKey ve dizin oluşturucu her ikisi de anahtarı arar, bu nedenle TryGetValue kullanımı fazladan bir aramayı önler.
CA1855: Span<T>.Fill() yerine Span<T>.Clear() kullanın span öğelerini varsayılan bir değerle doldurmak için Span<T>.Fill(T) çağırmaktansa Span<T>.Clear() çağırmak daha verimlidir.
CA1856: ConstantExpected özniteliğinin yanlış kullanımı ConstantExpectedAttribute Özniteliği bir parametreye doğru uygulanmadı.
CA1857: parametresi en iyi performans için bir sabit bekler ConstantExpectedAttribute ile açıklamalı bir parametreye geçersiz bir argüman iletilir.
CA1858: IndexOf yerine StartsWith kullanın Bir dizenin belirli bir ön ekle başlayıp başlamadığını kontrol etmek için String.StartsWith çağırmak, String.IndexOf çağırmaktan daha verimlidir.
CA1859: Gelişmiş performans için mümkün olduğunda somut türler kullanın Kod, arabirim türlerini veya soyut türleri kullanarak gereksiz arabirim çağrılarına veya sanal çağrılara yol açar.
CA1860: Uzantı yöntemini kullanmaktan Enumerable.Any() kaçının Bir koleksiyon türünün herhangi bir öğe içerip içermediğini belirlemek için Enumerable.Any çağrısı yapmak yerine, Length, Count veya IsEmpty kullanmak (mümkünse) daha verimli ve daha açıktır.
CA1861: Argüman olarak sabit diziler kullanmaktan kaçının Argüman olarak geçirilen sabit diziler yeniden kullanılmaz; bu da ek performans yüküne yol açar. Performansı artırmak için bunları static readonly alanlarına ayıklamayı düşünün.
CA1862: Büyük/küçük harfe duyarsız dize karşılaştırmaları gerçekleştirmek için yöntem aşırı yüklemelerini kullanın StringComparison Kod, büyük/küçük harfe duyarlı olmayan bir dize karşılaştırması gerçekleştirmek için ToLower() veya ToUpper() çağırdığında, gereksiz bir ayırma işlemi yapılır.
CA1863: Kullan CompositeFormat Biçimlendirme maliyetini azaltmak için, String.Format veya StringBuilder.AppendFormat için argüman olarak bir CompositeFormat örneğini önbelleğe alın ve kullanın.
CA1864: Yöntemini tercih edin IDictionary.TryAdd(TKey, TValue) Hem Dictionary<TKey,TValue>.ContainsKey(TKey) hem de Dictionary<TKey,TValue>.Add bir arama gerçekleştirir; bu gereksizdir. Dictionary<TKey,TValue>.TryAdd çağırmak daha verimlidir; bu, değerin eklenip eklenmediğini belirten bir bool döndürür. TryAdd, anahtar zaten mevcutsa anahtarın değerinin üzerine yazmaz.
CA1865-CA1867: char aşırı yüklemesini kullanın Tek karakter içeren bir dize için, char aşırı yüklemesi daha yüksek performanslı bir aşırı yüklemedir.
CA1868: Kümeler Contains için gereksiz çağrı Hem ISet<T>.Add(T) hem de ICollection<T>.Remove(T) bir arama yapar; bu da ICollection<T>.Contains(T) öğesini önceden çağırmayı gereksiz kılar. Bunun yerine, öğenin eklenip eklenmediğini veya kaldırılıp kaldırılmadığını belirten bir Boole değeri döndüren Add(T) ya da Remove(T) öğesini doğrudan çağırmak daha verimlidir.
CA1869: Örnekleri önbelleğe alma ve yeniden kullanma JsonSerializerOptions System.Text.Json serileştirmeyle ilgili meta verileri sağlanan örnekte dahili olarak önbelleğe aldığı için, serileştirme veya seri durumdan çıkarma için yerel bir örneğinin JsonSerializerOptions kullanılması, kodunuz birden çok kez yürütülürse uygulamanızın performansını önemli ölçüde düşürebilir.
CA1870: Önbelleğe alınmış SearchValues örnek kullanma Önbelleğe alınmış SearchValues<T> örnek kullanmak, değerleri IndexOfAny doğrudan veya ContainsAny doğrudan geçirmekten daha verimlidir.
CA1871: Null atanabilir bir yapıyı ArgumentNullException.ThrowIfNull'a geçirmeyin ArgumentNullException.ThrowIfNull bir object kabul eder, bu nedenle null atanabilir bir yapının geçirilmesi değerin kutulanmasına neden olabilir.
CA1872: Convert.ToHexString tabanlı çağrı zincirleri yerine Convert.ToHexStringLower ve BitConverter.ToString tercih edin Baytları onaltılık dize gösterimine kodlarken Convert.ToHexString veya Convert.ToHexStringLower kullanın. Bu yöntemler, tireleri ve String.ToLower öğesini değiştirmek için BitConverter.ToString ile String.Replace birleşimini kullanmaktan daha verimli ve bellek ayırma açısından daha elverişlidir.
CA1873: Pahalı olabilecek günlük kaydından kaçının Çoğu durumda, kayıt devre dışı bırakılır veya kayıt argümanlarının gereksiz şekilde değerlendirilmesine yol açan bir kayıt seviyesine ayarlanır.
CA1874: Kullan Regex.IsMatch Regex.IsMatch , değerinden Regex.Match(...).Successdaha basit ve daha hızlıdır.
CA1875: Kullan Regex.Count Regex.Count , değerinden Regex.Matches(...).Countdaha basit ve daha hızlıdır.
CA1877: 'Path.Combine' veya 'Path.Join' aşırı yükleme yöntemlerini kullanın Çok sayıda Path.Combine veya Path.Join işlem iç içe yerleştirildiğinde, bunlar daha iyi performans ve okunabilirlik sağlamak üzere tek bir işleme indirgenebilir.
CA2000: Kapsam dışına çıkmadan önce nesneleri serbest bırakın Bir nesnenin sonlandırıcısının çalışmasını engelleyecek istisnai bir olay meydana gelebileceğinden, nesneye ilişkin tüm referanslar kapsam dışına çıkmadan önce nesnenin kaynakları açıkça serbest bırakılmalıdır.
CA2002: Zayıf kimliği olan nesneleri kilitlemeyin Bir nesneye uygulama etki alanları arasından erişilebiliyorsa o nesnenin zayıf bir kimliğe sahip olduğu söylenir. Zayıf kimliğe sahip bir nesne üzerinde kilit almayı deneyen iş parçacığı aynı nesne üzerinde bir kilide sahip olan farklı uygulama etki alanı içindeki ikinci iş parçacığı tarafından engellenebilir.
CA2007: Doğrudan görev beklemeyin Zaman uyumsuz bir yöntem, Task ögesini doğrudan bekler. Bir zaman uyumsuz yöntem, doğrudan Task öğesini beklediğinde, yürütmenin devamı görevin oluşturulduğu aynı iş parçacığında gerçekleşir. Bu davranış performans açısından maliyetli olabilir ve kullanıcı arabirimi iş parçacığında kilitlenmeye neden olabilir. Devam etme niyetinizi belirtmek için Task.ConfigureAwait(Boolean) çağırmayı düşünebilirsiniz.
CA2008: TaskScheduler geçirmeden görev oluşturmayın Görev oluşturma veya devam etme işlemi, TaskScheduler parametresini belirtmeyen bir yöntem aşırı yüklemesini kullanır.
CA2009: ImmutableCollection değeri üzerinde ToImmutableCollection çağırmayın ToImmutable yöntemi, System.Collections.Immutable ad alanındaki değiştirilemez bir koleksiyon üzerinde gereksiz yere çağrıldı.
CA2011: Bir özelliği set erişimcisi içinde atamayın Bir özelliğe yanlışlıkla kendi set erişimcisi içinde bir değer atandı.
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 kullanmaya çalışmak veya tamamlandığı bilinmeden sonucuna doğrudan erişmeye çalışmak, bir özel duruma ya da veri bozulmasına 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ürleriyle kullanmayın System.Object.ReferenceEquals kullanarak değerler karşılaştırıldığında, 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 yöntemin ReferenceEquals 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. Bunu bir döngü içinde kullanmak, yığında sınırsız büyümeye ve sonuçta yığın taşmasına neden olabilir.
CA2015: MemoryManager<T'den türetilen türler için sonlandırıcı tanımlama> MemoryManager<T>'dan türetilen bir türe sonlandırıcı eklemek, bellek bir Span<T> tarafından hâlâ kullanılırken serbest bırakılmasına izin verebilir.
CA2016: CancellationToken parametresini bir tane alan yöntemlere iletin İşlem iptali bildirimlerinin düzgün şekilde yayılmasını sağlamak için CancellationToken parametresini bir parametre kabul eden yöntemlere iletin veya belirtecin kasıtlı olarak yayılmadığını belirtmek için CancellationToken.None değerini açıkça geçirin.
CA2017: Parametre sayısı uyuşmazlığı Günlükleme iletisi şablonunda sağlanan parametre sayısı, adlandırılmış yer tutucuların sayısıyla eşleşmiyor.
CA2018: Buffer.BlockCopy yöntemine geçirilen count bağımsız değişkeni, kopyalanacak bayt sayısını belirtmelidir Buffer.BlockCopy kullanılırken, count bağımsız değişkeni kopyalanacak bayt sayısını belirtir. count argümanı için Array.Length yalnızca öğeleri tam olarak bir bayt boyutunda olan dizilerde 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 eklenmiş bir alan, satır içinde veya açıkça bir static oluşturucusunda (Shared Visual Basic'te) başlatılır.
CA2020: IntPtr/UIntPtr'nin yerleşik işleçlerinden kaynaklanan 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.
CA2021: Uyumsuz türlerle Enumerable.Cast<T> veya Enumerable.OfType<T> çağrılmayın Enumerable.Cast<TResult>(IEnumerable) veya Enumerable.OfType<TResult>(IEnumerable) çağrısı, girdi koleksiyonunun türüyle uyumsuz bir tür parametresi belirtir.
CA2022: Stream.Read ile uygun olmayan okumalardan kaçının çağrısı Stream.Read 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 ayraçlar İleti şablonunda bulunan ayraçlar geçersiz. İleti şablonundaki tüm küme ayraçlarının geçerli açma/kapatma ayraçları olduğundan veya kaçıldığından emin olun.
CA2024: StreamReader.EndOfStream'i zaman uyumsuz yöntemlerde kullanmayın StreamReader.EndOfStream özelliği, arabellekte veri olmadığında istenmeyen eşzamanlı engellemeye neden olabilir. Bunun yerine doğrudan StreamReader.ReadLineAsync() kullanın ve akışın sonuna ulaşıldığında null döndürür.
CA2025: Beklenmeyen görevlere IDisposable örnekleri geçirmeyin Beklenmeyen görevler, IDisposable örneklerini kullandıktan uzun süre sonra, bu örnekleri kullanılmadıkları halde kullanabilir. Nesneler atılmadan önce bu nesneleri 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.
CA2100: SQL sorgularını güvenlik açıkları için gözden geçirin Bir yöntem, yönteme dize değişkeninden oluşturulmuş dize kullanarak System.Data.IDbCommand.CommandText özelliğini ayarlar. Bu kural, dize değişkeninin kullanıcı girişi içerdiğini varsayar. Kullanıcı girişi ile oluşturulan SQL komut dizesi, SQL enjeksiyon saldırılarına karşı savunmasız durumdadır.
CA2101: P/Invoke dize parametreleri için marshalling belirtin Bir platform çağırma üyesi kısmen güvenilen arayanlara izin verir, bir dize parametresine sahiptir ve dize açıkça sıralanmaz. Bu, olası bir güvenlik açığına neden olabilir.
CA2109: Görünür olay işleyicilerini gözden geçirin Ortak veya korunan olay işleme yöntemi algılandı. Olay işleme yöntemleri, kesinlikle gerekmedikçe dışa açılmamalıdır.
CA2119: Özel arabirimleri karşılayan yöntemleri mühürleyin Devralınabilir genel tür, iç (Visual Basic'te Arkadaş) arabiriminin geçersiz kılınabilir bir yöntem uygulaması sağlar. Bu kuralın ihlalini düzeltmek için yöntemin derleme dışından geçersiz kılınmasını önleyin.
CA2153: Bozuk Durum Özel Durumlarını işlemekten kaçının Bozuk Durum Özel Durumları (CSE) işleminizde bellek bozulması olduğunu gösterir. İşlemin kilitlenmesine izin vermek yerine bunları yakalamak, bir saldırganın bozuk bellek bölgesine bir açık oluşturabilmesi durumunda güvenlik açıklarına yol açabilir.
CA2200: Yığın ayrıntılarını korumak için yeniden fırlat Bir özel durum yeniden fırlatılır ve özel durum, throw deyiminde açıkça belirtilir. Bir özel durum, throw deyiminde özel durum belirtilerek yeniden fırlatılırsa, özel durumu başlangıçta fırlatan yöntem ile geçerli yöntem arasındaki yöntem çağrıları listesi kaybolur.
CA2201: Ayrılmış özel durum türleri oluşturmayın Bu özgün hata algılama ve hata ayıklamayı zorlaştırır.
CA2207: Değer türü statik alanları satır içi başlatın Bir değer türü açık bir statik oluşturucu bildirir. Bu kural ihlalini düzeltmek için, tüm statik verileri bildirildikleri anda başlatın ve statik oluşturucuyu kaldırın.
CA2208: Argüman özel durumlarını doğru örnekleyin ArgumentException olan veya ondan türeyen bir özel durum türünün varsayılan (parametresiz) oluşturucusu çağrılır ya da ArgumentException olan veya ondan türeyen bir özel durum türünün parametreli oluşturucusuna hatalı bir dize bağımsız değişkeni geçirilir.
CA2211: Sabit olmayan alanlar görünür olmamalıdır Sabit veya salt okunur olmayan statik alanlar iş parçacığı açısından güvenli değildir. Böyle bir alana erişim dikkatli bir şekilde denetlenebilir ve sınıf nesnesi erişimi eşitlemek için gelişmiş programlama tekniklerini gerektirir.
CA2213: Kullanılıp atılabilir alanlar uygun şekilde temizlenmelidir System.IDisposable uygulayan bir tür, türleri de IDisposable uygulayan alanlar bildirir. Alanın Dispose yöntemi, bildiren türün Dispose yöntemi tarafından çağrılmaz.
CA2214: Geçersiz kılınabilir yöntemleri oluşturucular içinde çağırmayın Bir oluşturucu bir sanal yöntemi çağırdığında, yöntemi çağıran örneğin oluşturucusu henüz çalıştırılmamış olabilir.
CA2215: Dispose yöntemleri temel sınıfın Dispose yöntemini çağırmalıdır Tür atılabilen bir türden devralınırsa, kendi Dispose yönteminden basit tür olan Dispose yöntemini çağırmalıdır.
CA2216: Atılabilir türler sonlandırıcıyı bildirmelidir System.IDisposable arabirimini uygulayan ve yönetilmeyen kaynakların kullanıldığını düşündüren alanlara sahip olan bir tür, Object.Finalize yönteminde açıklandığı gibi bir sonlandırıcı uygulamaz.
CA2217: Enum'ları FlagsAttribute ile işaretlemeyin Dışarıdan görülebilen bir enum, FlagsAttribute kullanılarak işaretlenmiştir ve ikinin kuvveti olmayan veya enum’da tanımlı diğer değerlerin birleşimi olmayan bir ya da daha fazla değere sahiptir.
CA2218: Equals geçersiz kılındığında GetHashCode'u da geçersiz kılın Bir genel tür, System.Object.Equals öğesini geçersiz kılar ancak System.Object.GetHashCode öğesini geçersiz kılmaz.
CA2219: Özel durum yan tümcelerinde özel durum oluşturmayın Bir finally ya da fault bloğunda bir istisna oluştuğunda, yeni istisna etkin istisnayı gizler. Bir filtre ifadesinde özel durum oluşturulduğunda, çalışma zamanı bunu sessizce yakalar. Bu özgün hata algılama ve hata ayıklamayı zorlaştırır.
CA2224: Eşitlik işleci aşırı yüklenirken Equals yöntemini geçersiz kılın Genel bir tür, eşitlik işleçini tanımlar ancak System.Object.Equals öğesini geçersiz kılmaz.
CA2225: İşleç aşırı yüklemelerinin adlandırılmış karşılıkları vardır Operatör aşırı yüklemesi bulundu ve beklenen adlandırılmış alternatif yöntem bulunamadı. Adlandırılmış alternatif üye, operatörle aynı işlevlere erişim sağlar ve aşırı yüklenmiş operatörleri desteklemeyen dillerde programlama yapan geliştiriciler için sunulmuştur.
CA2226: İşleçler simetrik aşırı yüklemelere sahip olmalıdır Bir tür, eşitlik ya da eşitsizlik operatörünü uygular ve ters işleci uygulamaz.
CA2227: Koleksiyon özellikleri salt okunur olmalıdır Yazılabilir koleksiyon özelliği kullanıcının koleksiyonun tamamını farklı bir koleksiyonla değiştirmesine izin verir. Yalnızca okunur bir özellik, koleksiyonun değiştirilmesini engeller ancak tek tek üyelerin ayarlanmasına yine de izin verir.
CA2229: Serileştirme oluşturucularını uygulayın Bu kural ihlalini düzeltmek için serileştirme yapıcısını uygulayın. Sealed bir sınıf için oluşturucuyu private yapın; aksi takdirde protected yapın.
CA2231: ValueType.Equals’i geçersiz kılarken eşittir işlecini de aşırı yükleyin Bir değer türü Object.Equals'ı geçersiz kılar, ama eşitlik işlecini uygulamaz.
CA2234: Dizeler yerine System.Uri nesneleri gönderin Adı "uri", "URI", "urn", "URN", "url" veya "URL" içeren bir dize parametresine sahip bir yönteme çağrı yapılır. Yöntemin bildirildiği tür, System.Uri parametresine sahip karşılık gelen bir yöntem aşırı yüklemesi içerir.
CA2235: Tüm serileştirilebilir olmayan alanları işaretleyin Seri hale getirilemeyen bir örnek alan türü seri hale getirilebilir bir tür içinde bildirilir.
CA2237: ISerializable türleri SerializableAttribute ile işaretleyin Ortak dil çalışma zamanı tarafından serileştirilebilir olarak tanınabilmeleri için, türlerin, ISerializable arabirimini uygulayarak özel bir serileştirme yordamı kullanıyor olsalar bile, SerializableAttribute özniteliği kullanılarak işaretlenmeleri gerekir.
CA2241: Biçimlendirme yöntemlerine doğru argümanları geçirin System.String.Format yöntemine geçirilen biçim bağımsız değişkeni, her nesne bağımsız değişkenine karşılık gelen bir biçim öğesi içermez veya bunun tersi geçerlidir.
CA2242: NaN denetimini doğru yapın Bu ifade, değeri Single.Nan veya Double.Nan'a karşı test eder. Single.IsNan(Single) ya da Double.IsNan(Double) değerini test etmek için kullanın.
CA2243: Öznitelik dize harfleri doğru çözümlenmelidir Bir özniteliğin dize sabiti parametresi, URL, GUID veya sürüm olarak doğru şekilde ayrıştırılamıyor.
CA2244: Dizine alınan öğe başlatmalarını yinelemeyin Nesne başlatıcıda aynı sabit dizine sahip birden fazla dizinlenmiş öğe başlatıcısı vardır. Son başlatıcı dışında tümü yedeklidir.
CA2245: Bir özelliği kendisine atamayın Bir özellik kendisine yanlışlıkla atandı.
CA2246: Aynı ifadede bir simgeyi ve onun üyesini atamayın Aynı deyimde bir simgenin ve üyesinin( yani bir alanın veya özelliğin) atanması önerilmez. Üye erişiminin, atamadan önce simgenin eski değerini mi yoksa bu deyimdeki atamadaki yeni değeri mi kullanması amaçlandığı net değildir.
CA2247: TaskCompletionSource oluşturucusna geçirilen bağımsız değişken TaskContinuationOptions sabit listesi yerine TaskCreationOptions sabit listesi olmalıdır. TaskCompletionSource'ta, temel görevi denetleen TaskCreationOptions'ı alan oluşturucular ve görevde depolanan nesne durumunu alan oluşturucular vardır. TaskCreationOptions yerine yanlışlıkla TaskContinuationOptions geçirilmesi, çağrının seçenekleri durum olarak işlemesine neden olur.
CA2248: Enum.HasFlag için doğru enum bağımsız değişkenini geçirin HasFlag yöntem çağrısına bağımsız değişken olarak geçirilen sabit listesi türü, çağıran sabit listesi türünden farklıdır.
CA2249: String.IndexOf yerine String.Contains kullanmayı göz önünde bulundurun Sonucun bir alt dizenin varlığını/yokluğunu kontrol etmek için kullanıldığı string.IndexOf çağrıları, string.Contains ile değiştirilebilir.
CA2250: ThrowIfCancellationRequested kullanın ThrowIfCancellationRequested, belirtecin iptal edilip edilmediğini otomatik olarak denetler ve iptal edilmişse OperationCanceledException fırlatır.
CA2251: String.Compare yerine String.Equals kullanın String.Compare sonucunu sıfırla karşılaştırmak yerine String.Equals kullanmak hem daha açık hem de muhtemelen daha hızlıdır.
CA2252: Önizleme özelliklerini kabul etme Önizleme API'lerini kullanmadan önce özellikleri önizlemeyi kabul edin.
CA2253: Adlandırılmış yer tutucular sayısal değerler olmamalıdır Günlükleme iletisi şablonundaki adlandırılmış yer tutucular yalnızca rakam karakterlerinden oluşmamalıdır.
CA2254: Şablon statik bir ifade olmalıdır Günlükleme iletisi şablonu çağrılar arasında değişiklik göstermemelidir.
CA2255: ModuleInitializer Öznitelik kitaplıklarda kullanılmamalıdır Modül başlatıcıları, uygulama kodu yürütülmeye başlamadan önce uygulamanın bileşenlerinin başlatılmasını sağlamak için uygulama kodu tarafından kullanılması amaçlanmıştır.
CA2256: Üst arabirimlerde bildirilen tüm üyeler, DynamicInterfaceCastableImplementation özniteliğiyle işaretlenmiş bir arabirimde bir uygulamaya sahip olmalıdır DynamicInterfaceCastableImplementationAttribute ile öznitelendirilen türler, IDynamicInterfaceCastable türünü uygulayan bir tür için arabirim uygulaması işlevi görür. Sonuç olarak, devralınan arabirimlerde tanımlanan üyelerin tümünü uygulaması gerekir; çünkü IDynamicInterfaceCastable öğesini uygulayan tür, aksi takdirde bunları sağlamayacaktır.
CA2257: Bir arabirimde DynamicInterfaceCastableImplementationAttribute ile tanımlanan üyeler static Uygulayan IDynamicInterfaceCastable bir tür meta verilerde dinamik arabirim uygulamayabileceği için, bu tür üzerinde tanımlanan açık bir uygulama olmayan bir örnek arabirimi üyesine yapılan çağrılar çalışma zamanında başarısız olabilir. Çalışma zamanı hatalarından kaçınmak için yeni arabirim üyelerini static işaretleyin.
CA2258: Visual Basic'te bir arayüz DynamicInterfaceCastableImplementation sağlamak desteklenmiyor İşlevsel DynamicInterfaceCastableImplementationAttributeöznitelikli bir arabirim sağlamak için Visual Basic'te desteklenmeyen Varsayılan Arabirim Üyeleri özelliği gerekir.
CA2259: Yalnızca statik alanlarla kullanıldığından emin olun ThreadStatic ThreadStaticAttribute, yalnızca static alanlarını (Visual Basic'te Shared) etkiler. Örnek alanlarına uygulandığında özniteliğinin davranış üzerinde hiçbir etkisi yoktur.
CA2260: Genel matematik arabirimlerini doğru uygulama Genel matematik arabirimleri, türetilmiş türün kendi kendine yinelenen tür parametresi için kullanılmasını gerektirir.
CA2261: ConfigureAwaitOptions.SuppressThrowing öğesini Task<TResult> ile kullanmayın ConfigureAwaitOptions.SuppressThrowing seçeneği, genel Task<TResult> tarafından desteklenmez; çünkü bu, geçersiz bir TResult döndürülmesine yol açabilir.
CA2262: Düzgün ayarla MaxResponseHeadersLength MaxResponseHeadersLength değerinin doğru şekilde sağlandığından emin olun. Bu değer kilobayt cinsinden ölçülür.
CA2263: Tür bilindiğinde genel aşırı yüklemeyi tercih edin Tür biliniyorsa, System.Type bağımsız değişkeni geçirmeye göre jenerik bir aşırı yükleme kullanmak tercih edilir; çünkü bu yaklaşım, derleme zamanında daha iyi denetimler sağlayarak daha temiz ve tür açısından daha güvenli kod yazılmasını destekler.
CA2264: Boş değer atanamayan bir değeri ArgumentNullException.ThrowIfNull'e iletmeyin ArgumentNullException.ThrowIfNull geçirilen bağımsız değişken olduğunda nullatar. Null değer atanamayan yapılar ve nameof()new ifadeleri gibi bazı yapıların hiçbir zaman null olmadığı bilinir, bu yüzden ArgumentNullException.ThrowIfNull hiçbir zaman hata oluşturmaz.
CA2265: Span<T> öğesini null veya default ile karşılaştırmayın Bir aralığı null veya default ile karşılaştırmak, amaçladığınız şeyi yapmayabilir. default ve null değişmez değeri örtük olarak Span<T>.Empty türüne dönüştürülür.
CA2266: Dosya tabanlı program giriş noktası ile başlamalıdır #! Dosya tabanlı bir program birden çok dosyadan oluştuğunda, giriş noktası dosyası dahil edilen diğer dosyalardan açıkça ayırt etmek için bir shebang (#!) satırıyla başlamalıdır.
CA2300: Güvenli olmayan seri durumdan çıkarıcı BinaryFormatter kullanmayın Güvenli olmayan seri durumdan çıkarma işlemleri, güvenilir olmayan veriler seri durumdan çıkarıldığında güvenlik açıklarına yol açabilir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2301: Önce BinaryFormatter.Binder'ı ayarlamadan BinaryFormatter.Deserialize çağırmayın Güvenli olmayan seri durumdan çıkarıcılar, güvenilmeyen verileri seri durumdan çıkarırken güvenlik açıklarına karşı savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2302: BinaryFormatter.Deserialize çağrılmadan önce BinaryFormatter.Binder'ın ayarlandığından emin olun Güvenilmeyen verilerin seri durumdan çıkarılması sırasında güvenli olmayan seri durumdan çıkarıcılar savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2305: Güvenli olmayan LosFormatter seri durumdan çıkarma aracını kullanmayın Güvenli olmayan seriden çıkarıcılar, güvenilmeyen verileri seriden çıkarırken güvenlik açığına sahiptir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2310: Güvenli olmayan NetDataContractSerializer seri durumdan çıkarma aracını kullanmayın Güvensiz seri durumdan çıkarma bileşenleri, güvenilmeyen verileri seri durumdan çıkarırken güvenlik açığına açıktır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2311: Önce NetDataContractSerializer.Binder'ı ayarlamadan seri durumdan çıkarmayın Güvenli olmayan seri durumdan çıkarıcılar, güvenilmeyen verileri seri durumdan çıkarırken güvenlik açıklarına karşı savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2312: Seri durumdan çıkarma işlemi yapılmadan önce NetDataContractSerializer.Binder'ın ayarlandığından emin olun Güvenli olmayan deserileştiriciler, güvenilmeyen verileri deserileştirdiklerinde güvenlik açığına sahip olur. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2315: Güvenli olmayan ObjectStateFormatter seri durumdan çıkarma aracını kullanmayın Güvenli olmayan deserileştiriciler, güvenilmeyen verileri deserileştirirken güvenlik açığına sahiptir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2321: SimpleTypeResolver kullanarak JavaScriptSerializer ile seri durumdan çıkarmayın Güvenli olmayan deserileştiriciler, güvenilmeyen verileri deserileştirirken güvenlik açığına sahiptir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2322: JavaScriptSerializer’ın seri durumdan çıkarılmadan önce SimpleTypeResolver ile başlatılmadığından emin olun Güvenli olmayan seri çözücüler, güvenilmeyen verileri seri çözerken güvenlik açıklarına karşı savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2326: TypeNameHandling değerlerini None dışında kullanmayın Güvenilmeyen verilerin seri durumdan çıkarılması sırasında güvenli olmayan seri durumdan çıkarıcılar savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2327: Güvenli olmayan JsonSerializerSettings kullanmayın Güvenli olmayan serileştirme çözücüleri, güvenilmeyen verileri çözümlerken güvenlik açığına neden olabilir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2328: JsonSerializerSettings'in güvenli olduğundan emin olun Güvenli olmayan serileştirme çözücüleri, güvenilmeyen verileri çözümlerken saldırılara açıktır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2329: JsonSerializer ile güvenli olmayan bir yapılandırma kullanarak seri durumdan çıkarmayın Güvenli olmayan seri durum çözücüler, güvenilmeyen verileri seri durumdan çözerken güvenlik açıklarına neden olabilir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2330: Seri durumdan çıkarma sırasında JsonSerializer’ın güvenli bir yapılandırmaya sahip olduğundan emin olun Güvensiz deserileştiriciler, güvenilmeyen veriler deserileştirilirken güvenlik açığına sahiptir. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir.
CA2350: DataTable.ReadXml() girişinin güvenilir olduğundan emin olun Güvenilmeyen giriş kullanılarak bir DataTable seri durumdan çıkarıldığında, bir saldırgan hizmet engelleme saldırısı gerçekleştirmek için kötü amaçlı giriş oluşturabilir. Bilinmeyen uzaktan kod yürütme güvenlik açıkları olabilir.
CA2351: DataSet.ReadXml() girişinin güvenilir olduğundan emin olun Güvenilmeyen girdiyle bir DataSet nesnesi seri durumdan çıkarıldığında, bir saldırgan hizmet engelleme saldırısı gerçekleştirmek için kötü amaçlı girdi oluşturabilir. Bilinmeyen uzaktan kod yürütme güvenlik açıkları olabilir.
CA2352: Seri hale getirilebilir türde güvenli olmayan DataSet veya DataTable, uzaktan kod yürütme saldırılarına karşı savunmasız olabilir SerializableAttribute ile işaretlenmiş bir sınıf veya yapı, DataSet veya DataTable alan ya da özelliği içerir ve GeneratedCodeAttribute öğesine sahip değildir.
CA2353: Serileştirilebilir türde güvenli olmayan DataSet veya DataTable Bir XML serileştirme özniteliğiyle veya veri sözleşmesi özniteliğiyle işaretlenmiş bir sınıf ya da yapı, DataSet veya DataTable alanı ya da özelliği içerir.
CA2354: Seri durumdan çıkarılmış nesne grafında güvenli olmayan DataSet veya DataTable, uzaktan kod yürütme saldırısına karşı savunmasız olabilir System.Runtime.Serialization.IFormatter serileştirilmiş bir öğeyle seri durumdan çıkarma yapıldığında, dönüştürülen türün nesne grafiği DataSet veya DataTable içerebilir.
CA2355: Seri durumdan çıkarılmış nesne grafında güvenli olmayan DataSet veya DataTable Nesne grafiği DataSet veya DataTable içerebilen dönüştürülen ya da belirtilen türün seri durumdan çıkarılması.
CA2356: Web seri durumdan çıkarılmış nesne grafında güvenli olmayan DataSet veya DataTable System.Web.Services.WebMethodAttribute veya System.ServiceModel.OperationContractAttribute içeren bir yöntem, DataSet veya DataTable öğesine başvurabilecek bir parametreye sahiptir.
CA2361: DataSet.ReadXml() içeren otomatik oluşturulan sınıfın güvenilmeyen verilerle kullanılmadığından emin olun DataSet güvenilmeyen girdiyle seri durumdan çıkarılırken, bir saldırgan hizmet reddi saldırısı gerçekleştirmek için kötü amaçlı bir girdi hazırlayabilir. Bilinmeyen uzaktan kod yürütme güvenlik açıkları olabilir.
CA2362: Otomatik olarak oluşturulan serileştirilebilir türdeki güvenli olmayan DataSet veya DataTable, uzaktan kod yürütme saldırılarına karşı savunmasız olabilir Güvenilmeyen girdi BinaryFormatter ile seri durumdan çözülürken ve seri durumdan çözülen nesne grafı bir DataSet veya DataTable içerdiğinde, saldırgan uzaktan kod yürütme saldırısı gerçekleştirmek için kötü amaçlı bir yük oluşturabilir.
CA3001: SQL ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen giriş ve SQL komutlarıyla çalışırken SQL ekleme saldırılarına dikkat edin. SQL ekleme saldırısı kötü amaçlı SQL komutlarını yürüterek uygulamanızın güvenliğini ve bütünlüğünü tehlikeye atabilir.
CA3002: XSS güvenlik açıkları için kodu gözden geçirme Web isteklerinden gelen güvenilmeyen girişlerle çalışırken siteler arası betik (XSS) saldırılarına dikkat edin. XSS saldırısı ham HTML çıkışına güvenilmeyen giriş ekler ve saldırganın kötü amaçlı betikleri yürütmesine veya web sayfanızdaki içeriği kötü amaçlı olarak değiştirmesine olanak sağlar.
CA3003: Dosya yolu ekleme güvenlik açıkları için kodu gözden geçirin Web isteklerinden gelen güvenilmeyen girişlerle çalışırken, dosyaların yollarını belirtirken kullanıcı tarafından denetlenen girişi kullanmaya dikkat edin.
CA3004: Bilgilerin açığa çıkmasıyla ilgili güvenlik açıkları için kodu gözden geçirin Özel durum bilgilerinin açıklanması, saldırganlara uygulamanızın iç işlevleri hakkında içgörüler sağlar ve bu da saldırganların yararlanabilecekleri diğer güvenlik açıklarını bulmasına yardımcı olabilir.
CA3005: LDAP ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken Basit Dizin Erişim Protokolü (LDAP) ekleme saldırılarına dikkat edin. Bir saldırgan, bilgi dizinlerine yönelik kötü amaçlı LDAP ifadelerini potansiyel olarak çalıştırabilir. Dizin hizmetlerine erişmek için dinamik LDAP deyimleri oluşturmak için kullanıcı girişi kullanan uygulamalar özellikle savunmasızdır.
CA3006: İşlem komutu ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken, komut ekleme saldırılarına dikkat edin. Komut ekleme saldırısı, temel alınan işletim sisteminde kötü amaçlı komutlar yürüterek sunucunuzun güvenliğini ve bütünlüğünü tehlikeye atabilir.
CA3007: Açık yeniden yönlendirme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken açık yeniden yönlendirme güvenlik açıklarına dikkat edin. Saldırgan, açık yeniden yönlendirme güvenlik açığından yararlanarak web sitenizi kullanarak geçerli bir URL'nin görünümünü verebilir, ancak istenmeyen bir ziyaretçiyi kimlik avına veya başka bir kötü amaçlı web sayfasına yönlendirebilir.
CA3008: XPath ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken XPath ekleme saldırılarına dikkat edin. Güvenilmeyen giriş kullanarak XPath sorguları oluşturmak, saldırganın istenmeyen bir sonuç döndürmek için sorguyu kötü amaçlı olarak işlemesine ve sorgulanan XML'nin içeriğini açığa çıkarmasına olanak tanıyabilir.
CA3009: XML ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken XML ekleme saldırılarına dikkat edin.
CA3010: XAML ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken XAML ekleme saldırılarına dikkat edin. XAML, nesne örnekleme ve yürütmeyi doğrudan temsil eden bir işaretleme dilidir. Bu, XAML'de oluşturulan öğelerin sistem kaynaklarıyla (örneğin, ağ erişimi ve dosya sistemi GÇ) etkileşim kurabileceği anlamına gelir.
CA3011: DLL ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken, güvenilmeyen kodu yüklemeye dikkat edin. Web uygulamanız güvenilmeyen kodu yüklerse, bir saldırgan işleminize kötü amaçlı DLL'ler ekleyip kötü amaçlı kod yürütebilir.
CA3012: Regex ekleme güvenlik açıkları için kodu gözden geçirme Güvenilmeyen girişlerle çalışırken regex ekleme saldırılarına dikkat edin. Bir saldırgan, regex enjeksiyonunu kullanarak bir düzenli ifadeyi kötü amaçla değiştirebilir; bunun sonucunda regex istenmeyen sonuçlarla eşleşebilir veya aşırı CPU tüketimine yol açarak Hizmet Reddi (DoS) saldırısına neden olabilir.
CA3061: URL'ye göre şema eklemeyin Tehlikeli dış başvurulara neden olabileceğinden Add yönteminin güvenli olmayan aşırı yüklemesini kullanmayın.
CA3075: Güvensiz DTD İşleme Güvenli olmayan DTDProcessing örnekleri kullanıyorsanız veya dış varlık kaynaklarına başvurursanız, ayrıştırıcı güvenilmeyen girişi kabul edebilir ve hassas bilgileri saldırganlara açıklayabilir.
CA3076: Güvensiz XSLT Betiği Yürütme .NET uygulamalarında Genişletilebilir Stil Sayfası Dil Dönüşümlerini (XSLT) güvenli olmayan bir şekilde yürütürseniz, işlemci hassas bilgileri saldırganlara açıklayan ve Hizmet Reddi ve Siteler Arası saldırılara yol açabilecek güvenilmeyen URI başvurularını çözebilir.
CA3077: API Tasarımı, XML Belgesi ve XML Metin Okuyucusunda Güvensiz İşleme XMLDocument ve XMLTextReader'dan türetilen bir API tasarlarken DtdProcessing'e dikkat edin. Dış varlık kaynaklarına başvururken veya çözümlenirken güvenli olmayan DTDProcessing örneklerinin kullanılması veya XML'de güvenli olmayan değerler ayarlanması bilgilerin açığa çıkmasına neden olabilir.
CA3147: Fiil işleyicilerini ValidateAntiForgeryToken ile işaretleme ASP.NET MVC denetleyicisi tasarlarken siteler arası istek sahteciliği saldırılarına dikkat edin. Siteler arası istek sahteciliği saldırısı, kimliği doğrulanmış bir kullanıcıdan ASP.NET MVC denetleyicinize kötü amaçlı istekler gönderebilir.
CA5350: Zayıf Şifreleme Algoritmaları Kullanmayın Zayıf şifreleme algoritmaları ve karma işlevleri bugün çeşitli nedenlerle kullanılır, ancak korudukları verilerin gizliliğini veya bütünlüğünü garanti etmek için kullanılmamalıdır. Bu kural kodda TripleDES, SHA1 veya RIPEMD160 algoritmaları bulduğunda tetikler.
CA5351: Bozuk Şifreleme Algoritmaları Kullanmayın Bozuk şifreleme algoritmaları güvenli olarak kabul edilmez ve kullanımları kesinlikle önerilmez. Bu kural, kodda MD5 karma algoritmasını veya DES veya RC2 şifreleme algoritmalarını bulduğunda tetikler.
CA5358: Güvenli Olmayan Şifreleme Modlarını Kullanmayın Güvenli Olmayan Şifreleme Modlarını Kullanmayın
CA5359: Sertifika doğrulamayı devre dışı bırakma Sertifika, sunucunun kimliğini doğrulamaya yardımcı olabilir. İsteklerin istenen sunucuya gönderildiğinden emin olmak için istemciler sunucu sertifikasını doğrulamalıdır. ServerCertificateValidationCallback her zaman döndürürse true, tüm sertifikalar doğrulamayı geçirir.
CA5360: Seri durumdan çıkarma sırasında tehlikeli yöntemleri çağırmayın Güvenli olmayan seri durumdan çıkarma, bir uygulamanın mantığını kötüye kullanmak, Hizmet Reddi (DoS) saldırısı uygulamak ve hatta seri durumdan çıkarıldıktan sonra rastgele kod yürütmek için güvenilmeyen veriler kullanıldığında ortaya çıkan bir güvenlik açığıdır. Uygulama, kendi denetimi altındaki güvenilmeyen verileri seri durumdan çıkarırken kötü amaçlı kullanıcıların bu seri durumdan çıkarma özelliklerini kötüye kullanmaları sık sık mümkündür. Özellikle, seri durumdan çıkarma işlemi sırasında tehlikeli yöntemleri çağırın. Güvenli olmayan seri durumdan çıkarma saldırılarının başarılı olması, saldırganın DoS saldırıları, kimlik doğrulama atlamaları ve uzaktan kod yürütme gibi saldırıları gerçekleştirmesine olanak sağlayabilir.
CA5361: Schannel’ın güçlü şifreleme kullanımını devre dışı bırakmayın Switch.System.Net.DontEnableSchUseStrongCrypto ayarını true olarak ayarlamak, giden Taşıma Katmanı Güvenliği (TLS) bağlantılarında kullanılan şifrelemeyi zayıflatır. Daha zayıf şifreleme, uygulamanızla sunucu arasındaki iletişimin gizliliğini tehlikeye atarak saldırganların hassas verileri dinlemesini kolaylaştırır.
CA5362: Seri durumdan çıkarılmış nesne grafında olası başvuru döngüsü Güvenilmeyen verilerin seri durumdan çıkarılması durumunda, seri durumdan çıkarılmış nesne grafını işleyen herhangi bir kodun sonsuz döngülere girmeden başvuru döngülerini işlemesi gerekir. Bu hem seri durumdan çıkarma geri çağırmasının parçası olan kodu hem de seri durumdan çıkarma tamamlandıktan sonra nesne grafını işleyen kodu içerir. Aksi takdirde, bir saldırgan başvuru döngüsü içeren kötü amaçlı verilerle Hizmet Reddi saldırısı gerçekleştirebilir.
CA5363: İstek doğrulamayı devre dışı bırakma İstek doğrulama, ASP.NET HTTP isteklerini inceleyen ve siteler arası betik oluşturma da dahil olmak üzere ekleme saldırılarına yol açabilecek tehlikeli olabilecek içerik içerip içermediklerini belirleyen bir özelliktir.
CA5364: Kullanım dışı bırakılan güvenlik protokollerini kullanmayın Aktarım Katmanı Güvenliği (TLS), çoğunlukla Köprü Metni Aktarım Protokolü Güvenli (HTTPS) ile bilgisayarlar arasındaki iletişimin güvenliğini sağlar. TLS'nin eski protokol sürümleri TLS 1.2 ve TLS 1.3'ten daha az güvenlidir ve yeni güvenlik açıklarına sahip olma olasılığı daha yüksektir. Riski en aza indirmek için eski protokol sürümlerinden kaçının.
CA5365: HTTP Üst Bilgisi Denetimini Devre Dışı Bırakmayın HTTP üst bilgi denetimi, yanıt üst bilgilerinde bulunan satır başı ve yeni satır karakterlerinin (\r ve \n) kodlamasını etkinleştirir. Bu kodlama, başlıkta yer alan güvenilmeyen verileri geri yansıtan bir uygulamayı istismar eden enjeksiyon saldırılarını önlemeye yardımcı olabilir.
CA5366: DataSet XML Okuması için XmlReader Kullan Güvenilmeyen verilerle XML okumak için bir DataSet kullanmak, tehlikeli dış başvuruların yüklenmesine neden olabilir; bu risk, güvenli bir çözümleyiciye sahip bir XmlReader kullanılarak veya DTD işleme devre dışı bırakılarak sınırlandırılmalıdır.
CA5367: İşaretçi Alanlarıyla Türleri SeriLeştirmeyin Bu kural, işaretçi alanı veya özelliği olan serileştirilebilir bir sınıf olup olmadığını denetler. Serileştirilemeyen üyeler, statik üyeler veya NonSerializedAttribute ile işaretlenmiş alanlar gibi işaretçi türünde olabilir.
CA5368: Sayfadan türetilen sınıflar için ViewStateUserKey değerini ayarlayın özelliğinin ViewStateUserKey ayarlanması, tek tek kullanıcılar için görünüm durumu değişkenine bir tanımlayıcı atamanıza izin vererek uygulamanıza yönelik saldırıları önlemenize yardımcı olabilir, böylece saldırganlar bir saldırı oluşturmak için değişkeni kullanamaz. Aksi takdirde, siteler arası istek sahteciliği için güvenlik açıkları olacaktır.
CA5369: Seri Durumdan Çıkarmak için XmlReader Kullanma Güvenilmeyen DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesine olanak tanıyabilir. Bu, güvenli bir çözümleyici ile XmlReader kullanılarak veya DTD ve XML satır içi şema işleme devre dışı bırakılarak kısıtlanmalıdır.
CA5370: Okuyucu doğrulama için XmlReader kullanma Güvenilmeyen DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesini sağlayabilir. Bu tehlikeli yükleme, güvenli çözümleyicisi olan bir XmlReader kullanılarak veya DTD ve XML satır içi şema işleme devre dışı bırakılarak kısıtlanabilir.
CA5371: Şema okuma için XmlReader kullanma Güvenilmeyen DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesini sağlayabilir. XmlReader'ı güvenli bir çözümleyiciyle veya DTD ve XML satır içi şema işleme devre dışı bırakılmış olarak kullanmak bunu kısıtlar.
CA5372: XPathDocument için XmlReader kullanma Güvenilmeyen verilerden XML'nin işlenmesi tehlikeli dış başvurular yükleyebilir. Bu, güvenli bir çözümleyici ile XmlReader kullanılarak veya DTD işleme devre dışı bırakılarak kısıtlanabilir.
CA5373: Eski anahtar türetme işlevini kullanmayın Bu kural, System.Security.Cryptography.PasswordDeriveBytes ve Rfc2898DeriveBytes.CryptDeriveKey zayıf anahtar türetme yöntemlerinin çağrılmasını algılar. System.Security.Cryptography.PasswordDeriveBytes zayıf bir PBKDF1 algoritması kullandı.
CA5374: XslTransform Kullanmayın Bu kural, kodda System.Xml.Xsl.XslTransform öğesinin örneklenip örneklenmediğini denetler. System.Xml.Xsl.XslTransform artık kullanım dışıdır ve kullanılmamalıdır.
CA5375: Hesap paylaşılan erişim imzası kullanmayın Hesap SAS’i, hizmet SAS’i ile izin verilmeyen blob kapsayıcıları, tablolar, kuyruklar ve dosya paylaşımları üzerindeki okuma, yazma ve silme işlemlerine erişim devredebilir. Ancak kapsayıcı düzeyindeki ilkeleri desteklemez ve verilen izinler üzerinde daha az esneklik ve kontrol sağlar. Kötü amaçlı kullanıcılar bunu aldıktan sonra depolama hesabınızın gizliliği kolayca tehlikeye girer.
CA5376: SharedAccessProtocol HttpsOnly kullanın SAS, HTTP üzerinden düz metin olarak iletilemeyen hassas verilerdir.
CA5377: Kapsayıcı düzeyi erişim ilkesini kullanma Kapsayıcı düzeyinde erişim ilkesi istediğiniz zaman değiştirilebilir veya iptal edilebilir. Verilen izinler üzerinde daha fazla esneklik ve denetim sağlar.
CA5378: ServicePointManagerSecurityProtocols'ı devre dışı bırakma Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols ayarını true olarak ayarlamak, Windows İletişim Çerçevesi'nin (WCF) Aktarım Katmanı Güvenliği (TLS) bağlantılarını TLS 1.0 kullanmakla sınırlandırır. TLS'nin bu sürümü kullanım dışı bırakılacaktır.
CA5379: Zayıf anahtar türetme işlevi algoritması kullanmayın Rfc2898DeriveBytes sınıfı varsayılan olarak algoritmayı SHA1 kullanır. Oluşturucunun bazı aşırı yüklemelerinde kullanılacak karma algoritmasını veya üzerini SHA256 belirtmeniz gerekir. HashAlgorithm özelliğinin yalnızca bir get erişimcisi olduğunu ve overridden değiştiricisine sahip olmadığını unutmayın.
CA5380: Kök depoya sertifika eklemeyin Bu kural, Güvenilen Kök Sertifika Yetkilileri sertifika deposuna sertifika ekleyen kodu algılar. Varsayılan olarak, Güvenilen Kök Sertifika Yetkilileri sertifika deposu, Microsoft Kök Sertifika Programı gereksinimlerini karşılayan bir dizi genel CA ile yapılandırılır.
CA5381: Sertifikaların kök depoya eklenmediğinden emin olun Bu kural, Güvenilen Kök Sertifika Yetkilileri sertifika deposuna sertifika ekleme olasılığı olan kodu algılar. Varsayılan olarak, Güvenilen Kök Sertifika Yetkilileri sertifika deposu, Microsoft Kök Sertifika Programı gereksinimlerini karşılayan bir dizi genel sertifika yetkilisi (CA) ile yapılandırılır.
CA5382: ASP.NET Core'da güvenli tanımlama bilgileri kullanma HTTPS üzerinden kullanılabilen uygulamalar, tarayıcıya tanımlama bilgisinin yalnızca Güvenli Yuva Katmanı (SSL) kullanılarak iletilmesi gerektiğini belirten güvenli tanımlama bilgileri kullanmalıdır.
CA5383: ASP.NET Core'da güvenli tanımlama bilgileri kullandığınızdan emin olun HTTPS üzerinden kullanılabilen uygulamalar, tarayıcıya tanımlama bilgisinin yalnızca Güvenli Yuva Katmanı (SSL) kullanılarak iletilmesi gerektiğini belirten güvenli tanımlama bilgileri kullanmalıdır.
CA5384: Dijital imza algoritması (DSA) kullanmayın DSA zayıf bir asimetrik şifreleme algoritmasıdır.
CA5385: Yeterli anahtar boyutuna sahip Rivest–Shamir–Adleman (RSA) algoritması kullanın 2048 bitten küçük bir RSA anahtarı deneme yanılma saldırılarına karşı daha savunmasızdır.
CA5386: SecurityProtocolType değerini sabit kodlamaktan kaçının Aktarım Katmanı Güvenliği (TLS), çoğunlukla Köprü Metni Aktarım Protokolü Güvenli (HTTPS) ile bilgisayarlar arasındaki iletişimin güvenliğini sağlar. TlS 1.0 ve TLS 1.1 protokol sürümleri kullanım dışı bırakılmıştır, TLS 1.2 ve TLS 1.3 ise günceldir. Gelecekte TLS 1.2 ve TLS 1.3 kullanım dışı bırakılabilir. Uygulamanızın güvenli kalmasını sağlamak için protokol sürümünü sabit kodlamaktan ve en az .NET Framework v4.7.1'i hedeflemekten kaçının.
CA5387: Yetersiz yineleme sayısıyla zayıf anahtar türetme işlevi kullanmayın Bu kural, bir kriptografik anahtarın 100.000'den az yineleme sayısıyla Rfc2898DeriveBytes tarafından oluşturulup oluşturulmadığını denetler. Daha yüksek yineleme sayısı, oluşturulan şifreleme anahtarını tahmin etmeye çalışan sözlük saldırılarına karşı azaltmaya yardımcı olabilir.
CA5388: Zayıf anahtar türetme işlevini kullanırken yeterli yineleme sayısını sağlayın Bu kural, bir kriptografik anahtarın, 100.000'den az olabilecek bir yineleme sayısıyla Rfc2898DeriveBytes tarafından oluşturulup oluşturulmadığını denetler. Daha yüksek yineleme sayısı, oluşturulan şifreleme anahtarını tahmin etmeye çalışan sözlük saldırılarına karşı azaltmaya yardımcı olabilir.
CA5389: Arşiv öğesinin yolunu hedef dosya sistemi yoluna eklemeyin Dosya yolu göreli olabilir ve beklenen dosya sistemi hedef yolunun dışında dosya sistemi erişimine yol açarak kötü amaçlı yapılandırma değişikliklerine ve lay-and-wait tekniğiyle uzaktan kod yürütülmesine yol açabilir.
CA5390: Şifreleme anahtarını sabit kodlamayın Simetrik algoritmanın başarılı olması için gizli anahtarın yalnızca gönderen ve alıcı tarafından bilinmesi gerekir. Bir anahtar sabit kodlandığında kolayca bulunur. Derlenmiş ikili dosyalar olsa bile, kötü amaçlı kullanıcıların ayıklaması kolaydır. Özel anahtarın gizliliği ihlal edildikten sonra şifre metninin şifresi doğrudan çözülebilir ve artık korunmaz.
CA5391: ASP.NET Core MVC denetleyicilerinde sahteciliğe karşı belirteçler kullanın POST, PUT, PATCH veya DELETE isteğinin, sahteciliğe karşı koruma belirteci doğrulanmadan işlenmesi siteler arası istek sahteciliği saldırılarına karşı savunmasız olabilir. Siteler arası istek sahteciliği saldırısı, kimliği doğrulanmış bir kullanıcıdan ASP.NET Core MVC denetleyicinize kötü amaçlı istekler gönderebilir.
CA5392: P/Invokes için DefaultDllImportSearchPaths özniteliğini kullanın Varsayılan olarak, DllImportAttribute kullanan P/Invoke işlevleri, yüklenecek kitaplığı bulmak için geçerli çalışma dizini de dahil olmak üzere bir dizi dizinde arama yapar. Bu, belirli uygulamalar için dll ele geçirmesine yol açan bir güvenlik sorunu olabilir.
CA5393: Güvenli olmayan DllImportSearchPath değeri kullanmayın Varsayılan DLL arama dizinlerinde ve derleme dizinlerinde kötü amaçlı bir DLL olabilir. Ya da uygulamanızın nereden çalıştırıldığına bağlı olarak, uygulamanın dizininde kötü amaçlı bir DLL olabilir.
CA5394: Güvenli olmayan rastgelelik kullanmayın Kriptografik olarak zayıf bir sahte rastgele sayı oluşturucu kullanmak, saldırganın hangi güvenlik duyarlı değerin oluşturulacağını tahmin etmesine olanak tanıyabilir.
CA5395: İşlem yöntemleri için HttpVerb özniteliği eksik Verileri oluşturan, düzenleyen, silen veya başka bir şekilde değiştiren tüm eylem yöntemlerinin siteler arası istek sahteciliği saldırılarına karşı koruma özniteliğiyle korunması gerekir. GET işlemi gerçekleştirmek, yan etkisi olmayan ve kalıcı verilerinizi değiştirmeyen güvenli bir işlem olmalıdır.
CA5396: HttpCookie için HttpOnly değerini true olarak ayarlayın Katmanlı savunma önlemi olarak, güvenlik açısından hassas HTTP tanımlama bilgilerinin HttpOnly olarak işaretlendiğinden emin olun. Bu, tarayıcıların betiklerin çerezlere erişmesine izin vermemesi gerektiğini gösterir. Eklenen kötü amaçlı betikler, tanımlama bilgilerini çalmanın yaygın bir yoludur.
CA5397: Kullanım dışı bırakılmış SslProtocols değerlerini kullanmayın Aktarım Katmanı Güvenliği (TLS), çoğunlukla Köprü Metni Aktarım Protokolü Güvenli (HTTPS) ile bilgisayarlar arasındaki iletişimin güvenliğini sağlar. TLS'nin eski protokol sürümleri TLS 1.2 ve TLS 1.3'ten daha az güvenlidir ve yeni güvenlik açıklarına sahip olma olasılığı daha yüksektir. Riski en aza indirmek için eski protokol sürümlerinden kaçının.
CA5398: Sabit kodlanmış SslProtocols değerlerinden kaçının Aktarım Katmanı Güvenliği (TLS), çoğunlukla Köprü Metni Aktarım Protokolü Güvenli (HTTPS) ile bilgisayarlar arasındaki iletişimin güvenliğini sağlar. TlS 1.0 ve TLS 1.1 protokol sürümleri kullanım dışı bırakılmıştır, TLS 1.2 ve TLS 1.3 ise günceldir. Gelecekte TLS 1.2 ve TLS 1.3 kullanım dışı bırakılabilir. Uygulamanızın güvenli kalmasını sağlamak için protokol sürümünü sabit kodlamaktan kaçının.
CA5399: HttpClient sertifika iptal listesi denetimini kesinlikle devre dışı bırak İptal edilen sertifikaya artık güvenilmiyor. Saldırganlar tarafından bazı kötü amaçlı verileri geçirirken veya HTTPS iletişiminde hassas verileri çalarken kullanılabilir.
CA5400: HttpClient sertifika iptal listesi denetiminin devre dışı bırakılmadığından emin olun İptal edilen sertifikaya artık güvenilmiyor. Saldırganlar tarafından bazı kötü amaçlı verileri geçirirken veya HTTPS iletişiminde hassas verileri çalarken kullanılabilir.
CA5401: CreateEncryptor'ı varsayılan olmayan IV ile kullanmayın Simetrik şifreleme, sözlük saldırılarını önlemek için her zaman tekrarlanamayan bir başlatma vektöru kullanmalıdır.
CA5402: CreateEncryptor'ı varsayılan IV ile kullanma Simetrik şifreleme, sözlük saldırılarını önlemek için her zaman tekrarlanamayan bir başlatma vektöru kullanmalıdır.
CA5403: Sertifikayı sabit kodlamayın Bir X509Certificate veya X509Certificate2 oluşturucusunun data veya rawData parametresi sabit kodlanmıştır.
CA5404: Belirteç doğrulama denetimlerini devre dışı bırakma TokenValidationParameters belirteç doğrulamasını denetleyen özellikler olarak falseayarlanmamalıdır.
CA5405: Temsilcilerde belirteç doğrulamayı her zaman atlamayın AudienceValidator veya LifetimeValidator öğesine atanan geri çağırma işlevi her zaman true döndürür.
IL3000: Tek bir dosya olarak yayımlarken Derleme dosya yoluna erişmekten kaçının Tek bir dosya olarak yayımlarken Derleme dosya yoluna erişmekten kaçının.
IL3001: Tek dosya olarak yayımlarken Derleme dosya yoluna erişmekten kaçının Tek bir dosya olarak yayımlarken Derleme dosya yoluna erişmekten kaçının.
IL3002: Tek bir dosya olarak yayımlarken ek açıklama eklenen RequiresAssemblyFilesAttribute üyeleri çağırmaktan kaçının Tek bir dosya olarak yayımlarken ek açıklama yapılmış olan RequiresAssemblyFilesAttribute üyeleri çağırmaktan kaçının.
IL3003: RequiresAssemblyFilesAttribute Açıklamalar tüm arabirim uygulamaları veya geçersiz kılmalar arasında eşleşmelidir. RequiresAssemblyFilesAttribute açıklamalar, tüm arabirim uygulamaları ve geçersiz kılmalar arasında eşleşmelidir.
IL3005: RequiresAssemblyFilesAttribute doğrudan uygulama giriş noktasına yerleştirilemez. RequiresAssemblyFilesAttribute doğrudan uygulama giriş noktasına yerleştirilemez.

Legend

Aşağıdaki tabloda, başvuru belgelerindeki her kural için sağlanan bilgi türü gösterilmektedir.

Item Description
Type Kuralın TypeName değeri.
Kural Kimliği Kuralın benzersiz tanımlayıcısı. RuleId ve Category, bir uyarının kaynak içi bastırılması için kullanılır.
Category Kuralın kategorisi, örneğin güvenlik.
Düzeltme bozucu veya bozucu olmayan niteliktedir Kuralın ihlaline yönelik düzeltmenin hataya neden olan bir değişiklik olup olmadığı. Kritik değişiklik, uyumsuzluğa neden olan hedefe bağımlı bir derlemenin düzeltilmiş yeni sürümle yeniden derlenmeyeceği veya değişiklik nedeniyle çalışma zamanında başarısız olabileceği anlamına gelir. Birden çok düzeltme mevcut olduğunda ve en az bir düzeltme hataya neden olan bir değişiklik olduğunda ve bir düzeltme olmadığında hem 'Hataya Neden Olan' hem de 'Kırılmayan' belirtilir.
Cause Kuralın bir uyarı oluşturmasına neden olan belirli yönetilen kod.
Description Uyarının arkasındaki sorunları açıklar.
İhlalleri düzeltme Kuralı karşılamak ve uyarı oluşturmasını önlemek için kaynak kodun nasıl değiştireceğini açıklar.
Uyarıların ne zaman bastırılması gerekiyor? Kuraldan gelen bir uyarıyı gizlemenin ne zaman güvenli olduğunu açıklar.
Örnek kod Kuralı ihlal eden örnekler ve kuralı karşılayan düzeltilmiş örnekler.
İlgili kurallar İlgili kurallar.