Kod analizi ihlallerini gizleme

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 Ctrl+Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Sorunları>gizle veya yapılandır Kural numarasını> gizle'yi <seçin ve ardından Kaynak'ta veya Kaynak (öznitelik) içinde öğesini seçin.

    • Kaynak'ı seçerseniz, kodunuza eklenen önişlemci yönergesinin önizlemesini görürsünüz.

      Hızlı Eylemler Gizle menüsünden Kaynak seçiminde görüntülenen ekran görüntüsü.

    • Kaynak (öznitelik) seçeneğini belirlerseniz, kodunuza eklenen SuppressMessageAttribute özniteliğinin önizlemesini görürsünüz.

      Hızlı İşlemleri Gizle menüsünden Kaynak (öznitelik) seçimini gösteren ekran görüntüsü.

Hata Listesi'ni kullanarak ihlalleri gizleme

Hata Listesi penceresini kullanarak ihlalleri engellemek için şu adımları izleyin:

  1. Hata Listesi penceresinden, gizlemesini istediğiniz kuralları seçin.

  2. Sağ tıklayın ve Ardından Kaynakta Gizle'yi>seçin.

    Değişiklikleri Önizle iletişim kutusu açılır ve kaynak koda eklenen C# #pragma uyarı yönergesinin veya Visual Basic #Disable uyarı yönergesinin önizlemesini gösterir.

    Kod dosyasına #pragma uyarıları eklemeye yönelik Değişiklikleri Önizle iletişim kutusunu gösteren ekran görüntüsü.

  3. Değişiklikleri kod dosyanıza kaydetmek için Uygula'yı seçin.

Hata Listesi derleme tanılamalarını dışla

Hata Listesi penceresinde Gizle menü seçeneğini görmüyorsanız, ihlal büyük olasılıkla bir derlemedendir ve canlı analizden değildir. Hata Listesi penceresinde hem canlı kod analizinden hem de derlemelerden tanılamalar veya kural ihlalleri görüntülenir. Derleme tanılaması eski olabileceğinden, örneğin ihlali düzeltmek için kodu düzenlediyseniz ancak yeniden oluşturmadıysanız, bu tanılamaları her zaman Hata Listesi'nden gizleyemezsiniz.

Canlı analiz veya IntelliSense'ten alınan tanılamalar her zaman geçerli kaynaklarla günceldir ve hata listesinden her zaman gizlenebilir. Derleme tanılamalarını seçiminizin dışında tutmak için şu adımları izleyin:

  1. Hata Listesi kaynak filtresi açılan listesinden Build + IntelliSense seçimini Yalnızca IntelliSense olarak değiştirin.

    Hata Listesi kaynak filtresini gösteren ekran görüntüsü.

  2. Gizlemesini istediğiniz tanılamayı seçin ve daha önce açıklandığı gibi devam edin.

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 Ctrl+Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Kural numarasını> gizle'yi <seçin ve ardından Gizleme Dosyası'nı seçin.

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

Hata Listesi'nden genel bir gizleme dosyası kullanma

Hata Listesi penceresini kullanarak genel bir gizleme dosyasıyla ihlalleri engellemek için şu adımları izleyin:

  1. Hata Listesi penceresinden, gizlemesini istediğiniz kuralları seçin.

  2. Sağ tıklayın ve ardından Gizleme Dosyasında Gizle'yi>seçin.

    Değişiklikleri Önizle iletişim kutusu açılır ve genel gizleme dosyasına eklenen özniteliğin SuppressMessageAttribute önizlemesini gösterir.

    Gizleme dosyasında SuppressMessageAttribute özniteliği bulunan Değişiklikleri Önizle iletişim kutusunu gösteren ekran görüntüsü.

  3. Genel gizleme dosyasını kaydetmek için Uygula'yı seçin.

Tüm geçerli ihlalleri gizleme

Tüm geçerli ihlallerin gizlenme işlemi 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 Derlemeyi Çözümle>ve Etkin Sorunları Gizle'yi 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 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.

Kural kümesi kullanarak ihlalleri gizleme

Kural kümesi düzenleyicisinde, adının yanındaki onay kutusunu temizleyin veya Eylem'i Yok olarak ayarlayın.

Kaynak içi gizleme ve SuppressMessageAttribute özniteliği

Kaynak içi gizleme (ISS), uyarıyı SuppressMessageAttribute engellemek için özniteliğini kullanır. Özniteliğini, uyarıyı SuppressMessageAttribute oluşturan kod kesiminin yakınındaki kaynak dosyaya 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 Ctrl+Dönemi (.) veya Alt+Enter tuşlarına basın.

  2. Hızlı Eylemler menüsünden Sorunları>gizle veya yapılandır Kural 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 Derlemeyi Çözümle>ve Etkin Sorunları Gizle'yi seçerek bunların tümünü gizleyebilirsiniz.

Not

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; CAXXXXuzun adıdır CAXXXX:FriendlyTypeName.

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

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

  • Scope: Uyarının gizlendiği 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 FxCop ) 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 değeri namespaceanddescendants yoksayar.

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

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

SuppressMessageAttribute kullanımı

Kod analizi uyarıları, özniteliğin uygulandığı düzeyde gizleniyor SuppressMessageAttribute . Ö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 nedeniyle kural adının atlanması önerilmez.

Yöntem gövdesinde seçmeli ihlalleri gizleme

Gizleme öznitelikleri bir yönteme uygulanabilir, ancak bir yöntem gövdesine eklenemez. Özniteliğini yöntemine eklerseniz, belirli bir kuralın SuppressMessageAttribute tüm ihlalleri gizleniyor.

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ı, özniteliğinin özelliğini SuppressMessageAttribute kullanarak ihlalin belirli bir örneğini MessageId gizlemenize olanak tanır. Genel olarak, belirli bir simgedeki (yerel değişken veya parametre) ihlallere yönelik eski kurallar özelliği dikkate alır MessageId . CA1500:VariableNamesShouldNotMatchFieldNames , böyle bir kurala örnektir. Ancak yürütülebilir koddaki ihlallere yönelik eski kurallar (sembol olmayan) özelliğine MessageId 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, CA1500:VariableNamesShouldNotMatchFieldNames iki ihlali olan kod gösterilmektedir: değişken için name bir ihlal ve değişken için age başka bir ihlal. Yalnızca simgenin age 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}");
    }
}

Genel düzeyde gizlemeler

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 ihlaller gönderir. 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. Uyarıyı ad alanı içindeki türlere karşı gizlemez.

  • Target her zaman tam öğe adını içerir.

  • Herhangi bir gizleme, açık bir kapsam belirtilerek ifade edilebilir. Bu baskılar küresel düzeyde yaşamalı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 gizlemeler bu dosyada depolanır. Ayrıca, bazı ASP.NET gizlemeleri bu dosyada depolanır çünkü formun arkasındaki kod için proje düzeyi 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ı

Kapsamı kullanarak module derlemenin tamamı için kod kalitesi ihlallerini gizleyebilirsiniz.

Ö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.

Not

Kod analizi, bütün bir derlemeye veya tek bir parametreye uygulandığında yoksayar GeneratedCodeAttribute .