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 none
ayarlayı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:
- C#: #pragma uyarısı
- Visual Basic: Uyarıyı devre dışı bırakma
İ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:
İ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.
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.
Hata Listesi'ni kullanarak ihlalleri gizleme
Hata Listesi penceresini kullanarak ihlalleri engellemek için şu adımları izleyin:
Hata Listesi penceresinden, gizlemesini istediğiniz kuralları seçin.
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.
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:
Hata Listesi kaynak filtresi açılan listesinden Build + IntelliSense seçimini Yalnızca IntelliSense olarak değiştirin.
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:
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.
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:
Hata Listesi penceresinden, gizlemesini istediğiniz kuralları seçin.
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.
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:
Visual Studio menü çubuğunda Derlemeyi Çözümle>ve Etkin Sorunları Gizle'yi seçin.
Çö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:
Çözüm Gezgini projenizi seçin.
Sağ tıklayın ve Özellikler'i seçin (veya Alt + Enter tuşlarına basın).
Ö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:
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.
Hızlı Eylemler menüsünden Sorunları>gizle veya yapılandır Kural numarasını> gizle'yi <seçin.
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;CAXXXX
uzun adıdırCAXXXX: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ğerinamespaceanddescendants
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
.