Aracılığıyla paylaş


Kod analizi ihlallerini bastırma

Kod oluştururken ekibinizle işbirliği yaparsanız, bir uyarının geçerli olmadığını belirtmek genellikle yararlı olur. Kod analizi ihlallerinin bastırılması, ekip üyelerine kodun gözden geçirildiğini ve uyarının gizlenebileceğini gösterir. Aşağıdaki bölümlerde, Visual Studio IDE kullanarak kod analizi ihlallerini gizlemenin farklı yolları açıklanmaktadır.

EditorConfig dosyasını kullanarak ihlalleri gizleme

Çözümünüz veya projenizin EditorConfig dosyasında, yapılandırmak istediğiniz her kural için bir girdi ekleyin ve önem derecesini olarak noneayarlayın. Örneğin, dotnet_diagnostic.CA1822.severity = none. Daha fazla bilgi için bkz. EditorConfig dosyasında kural önem derecesini el ile yapılandırma. EditorConfig dosyası eklemek için bkz. Projeye EditorConfig dosyası ekleme.

Kaynak kodundaki ihlalleri gizleme

Belirli bir kod satırı için ihlalleri gizleyen bir önişlemci yönergesi kullanarak kaynak kodunuzdaki ihlalleri gizleyebilirsiniz:

İsterseniz SuppressMessageAttribute özniteliğini kullanarak C# ve Visual Basic kodunuzdaki bir uyarıyı gizleyebilirsiniz.

Kod düzenleyicisini kullanarak ihlalleri gizleme

Kod düzenleyicisini kullanarak ihlalleri engellemek için şu adımları izleyin:

  1. İmleci ihlal içeren kod satırına getirin ve Hızlı Eylemler menüsünü açmak için +Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Sorunları gizle veya yapılandır>< seçin ve ardından > veya Kaynak (öznitelik) içerisinde öğesini seçin.

Genel gizleme dosyası kullanarak ihlalleri gizleme

Genel gizleme dosyası , kod ihlallerini engellemek için SuppressMessageAttribute özniteliğini kullanır.

Kod düzenleyicisinden genel bir gizleme dosyası kullanma

Kod düzenleyicisini kullanarak genel bir gizleme dosyasıyla ihlalleri engellemek için şu adımları izleyin:

  1. Kod düzenleyicisinde, imleci ihlal içeren bir kod satırının üzerine getirin ve Hızlı Eylemler menüsünü açmak için +Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Kuralları Bastır< numarasını> seçin ve ardından Bastırma Dosyası'nda seçeneğini işaretleyin.

    Visual Studio, kod düzenleyicisinde yeni genel gizleme dosyasını içeren bir sekme oluşturur.

Tüm geçerli ihlalleri bastır

Geçerli tüm ihlallerin bastırılması bazen temel alma olarak adlandırılır. Bir çözüm veya projedeki tüm geçerli ihlalleri engellemek için şu adımları izleyin:

  1. Visual Studio menü çubuğunda Çözümle>Derle ve Etkin Sorunları Bastır'ı seçin.

  2. Çözümün tamamında ihlalleri engellemek için Çözüm için'i seçin veya yalnızca projenizin ihlallerini engellemek için Proje adı< için'yi seçin>.

Proje ayarlarını kullanarak ihlalleri gizleme

Çözüm Gezgini proje ayarlarını kullanarak ihlalleri engellemek için şu adımları izleyin:

  1. Çözüm Gezgini'nden projenizi seçin.

  2. Sağ tıklayın ve Özellikler'i seçin (veya Alt + Enter tuşlarına basın).

  3. Özellikler penceresinde sol bölmeden Kod Analizi'ni seçin ve ardından Oluşturulan koddaki sonuçları gizle seçeneğinin işaretini kaldırın.

Kaynak içi gizleme ve SuppressMessageAttribute özniteliği

Kaynak içi bastırma (ISS), bir uyarıyı bastırmak için SuppressMessageAttribute özniteliğini kullanır. Kaynak dosyaya, uyarıyı oluşturan kod kesiminin yakınına SuppressMessageAttribute özniteliğini ekleyebilirsiniz.

Özniteliği kod düzenleyicisine el ile girebilir veya özniteliği aşağıdaki gibi otomatik olarak ekleyebilirsiniz:

  1. Kod düzenleyicisinde, imleci ihlal içeren bir kod satırının üzerine getirin ve Hızlı Eylemler menüsünü açmak için +Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Hızlı Eylemler>< gizle veya yapılandırKural numarasını> gizle'yi seçin.

  3. Aşağıdaki adımlardan birini yapın:

    • Kaynak (öznitelik) içinde öğesini seçin.

      Visual Studio kodunuz için bir SuppressMessageAttribute öznitelik ekler.

    • Gizleme Dosyası'nda öğesini seçin.

      Visual Studio, kod düzenleyicisinde öznitelikleri olan SuppressMessageAttribute yeni bir genel gizleme dosyası içeren bir sekme oluşturur.

SuppressMessageAttribute özniteliği, yönetilen kod derlemenizin meta verilerine dahil edilen koşullu bir özniteliktir. Bu öznitelik yalnızca derleme simgesi derleme zamanında tanımlanıyorsa CODE_ANALYSIS eklenir.

Yalnızca C++ ve CLI kodunda, özniteliğini eklemek için makroları CA_SUPPRESS_MESSAGE veya CA_GLOBAL_SUPPRESS_MESSAGE üst bilgi dosyasında kullanın.

Bir projeyi Visual Studio'nun en son sürümüne geçirirseniz çok sayıda kod analizi uyarısı görebilirsiniz. Uyarıları düzeltmeye hazır değilseniz Çözümle>Derle ve Etkin Sorunları Bastır'ı seçerek uyarıların tümünü bastırabilirsiniz.

Uyarı

Kaynak içi gizleme meta verilerinin yanlışlıkla gönderimini önlemek için yayın derlemelerinde kaynak içi gizlemeleri kullanmayın.

SuppressMessageAttribute öznitelik biçimi

SuppressMessageAttribute özniteliği aşağıdaki biçime sahiptir:

[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]

özniteliğinin özellikleri şunlardır:

  • Category: Kuralın kategorisi. Kod çözümleme kuralı kategorileri hakkında daha fazla bilgi için bkz. Kod kalitesi kuralları.

  • CheckId: Kuralın tanımlayıcısı. Destek, kural tanımlayıcısı için hem kısa hem de uzun bir ad içerir. Kısa ad CAXXXX; uzun ad CAXXXX:FriendlyTypeName'dir.

  • Justification: İletinin gizlenme nedenini belgelemede kullanılan metin.

  • MessageId: Her ileti için sorunun benzersiz tanımlayıcısı.

  • Scope: Uyarının bastırıldığı hedef. Hedef belirtilmezse, sistem bunu özniteliğin hedefine ayarlar. Desteklenen kapsamlar şunlardır:

    • module: Bu kapsam, bir derlemeye karşı uyarıları bastırır. Bu, projenin tamamı için geçerli olan genel bir gizlemedir.

    • resource: (yalnızca eski analiz ) Bu kapsam, modülün (derleme) parçası olan kaynak dosyalarına yazılan tanılama bilgilerindeki uyarıları gizler. Bu kapsam, yalnızca kaynak dosyaları analiz eden Roslyn çözümleyicisi tanılamaları için C#/VB derleyicilerinde okunmuyor veya dikkate almıyor.

    • type: Bu kapsam bir türe karşı uyarıları bastırır.

    • member: Bu kapsam, bir üyeye karşı uyarıları gizler.

    • namespace: Bu kapsam, ad alanının kendisine karşı uyarıları gizler. Ad alanı içindeki türlere karşı uyarıları gizlemez.

    • namespaceanddescendants: (Derleyici sürümü 3.x veya üzeri ve Visual Studio 2019 veya üzerini gerektirir) Bu kapsam, bir ad alanında ve tüm alt simgelerinde uyarıları gizler. Eski analiz namespaceanddescendants değerini yok sayar.

  • Target: Uyarının gizlendiği hedefi belirten tanımlayıcı. Tam nitelikli bir bileşen adı içermelidir.

Visual Studio'da uyarılar gördüğünüzde, SuppressMessageAttribute örneklerini genel bastırma dosyasına bir bastırma ekleyerek görüntüleyebilirsiniz. Gizleme özniteliği ve gerekli özellikleri bir önizleme penceresinde görünür.

SuppressMessageAttribute kullanımı

Kod analizi uyarıları, SuppressMessageAttribute özniteliğinin uygulandığı düzeyde engelleniyor. Örneğin, öznitelik derleme, modül, tür, üye veya parametre düzeyinde uygulanabilir. Bu özniteliği uygulamanın amacı, gizleme bilgilerini ihlalin oluştuğu kodla sıkı bir şekilde bağlamaktır.

Genel gizleme biçimi kural kategorisini ve kural adının isteğe bağlı olarak okunabilir bir gösterimini içeren kural tanımlayıcısını içerir. Örneğin:

[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]

Kaynak içi gizleme meta verilerini en aza indirmenin katı performans nedenleri varsa kural adı atlanabilir. Kural kategorisi ve kural kimliği birlikte yeterince benzersiz bir kural tanımlayıcısı oluşturur. Örneğin:

[SuppressMessage("Microsoft.Design", "CA1039")]

Bakım kolaylığı sebeplerinden dolayı kural adının atlanması önerilmez.

Yöntem gövdesi içinde seçmeli ihlalleri engelleme (yalnızca eski kod analizi)

Gizleme öznitelikleri bir yönteme uygulanabilir, ancak bir yöntem gövdesine eklenemez. Eğer yönteme SuppressMessageAttribute özelliğini eklerseniz, belirli bir kuralın tüm ihlalleri gizlenir.

Bazı durumlarda, ihlalin belirli bir örneğini bastırmak isteyebilirsiniz. Gelecekteki kodun kod analizi kuralından otomatik olarak muaf tutulmadığı örneği düşünün. Belirli kod analizi kuralları, MessageId özniteliğinin SuppressMessageAttribute özelliğini kullanarak ihlalin belirli bir örneğini gizlemenize olanak tanır. Belirli bir simgedeki (yerel değişken veya parametre) ihlaller için eski kurallar MessageId özelliğine saygı gösterir. CA1500:VariableNamesShouldNotMatchFieldNames böyle bir kurala örnektir. Ancak yürütülebilir koddaki bu ihlaller için miras kalan kurallar (sembol olmayan), MessageId özelliğine uymaz. Ayrıca.NET Derleyici Platformu ("Roslyn") çözümleyicileri özelliğine MessageId saygı duymaz.

Bir kuralın belirli bir simge ihlalini engellemek için özniteliğin MessageId özelliği SuppressMessageAttribute için simge adını belirtin. Aşağıdaki örnekte kodun CA1500:VariableNamesShouldNotMatchFieldNames kuralının iki ihlalini gösterdiği görülmektedir: değişken için bir ihlal ve değişken için name başka bir ihlal. Yalnızca age sembolü için kural ihlali bastırılır.

public class Animal
{
    int age;
    string name;

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1500:VariableNamesShouldNotMatchFieldNames", MessageId = "age")]
    private void PrintInfo()
    {
        int age = 5;
        string name = "Charlie";

        Console.WriteLine($"Age {age}, Name {name}");
    }
}

Küresel düzeyde bastırmalar

Yönetilen kod çözümleme aracı derleme, modül, tür, üye veya parametre düzeyinde uygulanan öznitelikleri inceler SuppressMessageAttribute . Ayrıca kaynaklara ve ad alanlarına yönelik ihlalleri bildirir. Bu ihlallerin genel düzeyde uygulanması ve kapsamı belirlenmiş ve hedeflenmiş olması gerekir. Örneğin, aşağıdaki ileti ad alanı ihlalini bastırır:

[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]

Genel düzeyde gizlemeler için:

  • Bir uyarıyı bir namespace kapsamla bastırdığınızda, uyarıyı ad alanının kendisine karşı bastırır. Ad alanı içindeki türlere karşı olan uyarıyı bastırmaz.

  • Target her zaman tam olarak tanımlanmış öğe adını içerir.

  • Herhangi bir gizleme, açık bir kapsam belirtilerek ifade edilebilir. Bu baskılar küresel düzeyde olmalıdır. Bir türü değiştirerek üye düzeyinde gizleme belirtemezsiniz.

  • Genel düzeyde gizlemeler, açıkça sağlanan kullanıcı kaynağıyla eşleşmeyen derleyici tarafından oluşturulan koda başvuran iletileri gizlemenin tek yoludur. Örneğin, aşağıdaki kod derleyici tarafından yayılan bir oluşturucuya karşı bir ihlali engeller:

    [module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]

Genel gizleme dosyası

Genel gizleme dosyası, genel düzeyde gizleme veya hedef belirtmeyen gizlemeler olan gizlemeleri korur. Örneğin, derleme düzeyi ihlalleri için baskılamalar bu dosyada depolanır. Ayrıca, bazı ASP.NET baskılamaları bu dosyada depolanır çünkü bir formun arkasındaki kod için proje seviyesi ayarları kullanılamaz. Visual Studio, Hata Listesi penceresindeki Gizle komutunun Proje Gizleme Dosyasında seçeneğini ilk kez belirlediğinizde projenize genel bir gizleme dosyası oluşturur ve ekler.

Modül gizleme kapsamı

module kapsamını kullanarak derlemenin tamamı için kod kalitesi ihlallerini baskılayabilirsiniz.

Örneğin, GlobalSuppressions proje dosyanızdaki aşağıdaki öznitelik, ASP.NET Core projesi için ConfigureAwait ihlalini gizler:

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "ASP.NET Core doesn't use thread context to store request context.", Scope = "module")]

Oluşturulan kod

Yönetilen kod derleyicileri ve bazı dış araçlar, hızlı kod geliştirmeye yardımcı olmak için kod oluşturur. Kaynak dosyalarda görünen derleyici tarafından oluşturulan kod özniteliğiyle GeneratedCodeAttribute işaretlenir.

Kaynak kodu analizi için oluşturulan koddaki iletileri bir .editorconfig dosyasında gizleyebilirsiniz. Daha fazla bilgi için bkz. Oluşturulan kodu dışlama.

Eski kod analizi için, oluşturulan kod için kod analizi uyarılarını ve hatalarını gizlemeyi seçebilirsiniz. Bu tür uyarıları ve hataları gizleme hakkında bilgi için bkz . Oluşturulan kod için kod analizi uyarılarını gizleme.

Uyarı

Kod analizi, GeneratedCodeAttribute öğesini tüm bir derlemeye veya tek bir parametreye uygulandığında göz ardı eder.