Share via


Sembunyikan pelanggaran analisis kode

Jika Anda berkolaborasi dengan tim saat membuat kode, sering kali berguna untuk menunjukkan bahwa peringatan tidak berlaku. Menekan pelanggaran analisis kode menunjukkan kepada anggota tim bahwa kode ditinjau, dan peringatan dapat ditekan. Bagian berikut menjelaskan berbagai cara untuk menyembunyikan pelanggaran analisis kode menggunakan IDE Visual Studio.

Sembunyikan pelanggaran menggunakan file EditorConfig

Dalam file EditorConfig untuk solusi atau proyek Anda, tambahkan entri untuk setiap aturan yang ingin Anda konfigurasi dan atur tingkat keparahannya ke none. Contohnya,dotnet_diagnostic.CA1822.severity = none. Untuk informasi selengkapnya, lihat Mengonfigurasi tingkat keparahan aturan secara manual dalam file EditorConfig. Untuk menambahkan file EditorConfig, lihat Tambahkan file EditorConfig ke proyek.

Sembunyikan pelanggaran dalam kode sumber

Anda dapat menekan pelanggaran dalam kode sumber Anda menggunakan arahan praprosesor, yang menekan pelanggaran untuk baris kode tertentu:

Atau, Anda dapat menggunakan atribut SuppressMessageAttribute untuk menekan peringatan dalam kode C# dan Visual Basic Anda.

Menyembunyikan pelanggaran menggunakan editor kode

Untuk menekan pelanggaran menggunakan editor kode, ikuti langkah-langkah berikut:

  1. Tempatkan kursor di baris kode dengan pelanggaran dan tekan Ctrl+Period (.) atau Alt+Enter untuk membuka menu Tindakan Cepat.

  2. Pilih Sembunyikan atau konfigurasikan masalah>Sembunyikan <nomor> aturan, lalu pilih di Sumber atau di Sumber (atribut).

    • Jika Anda memilih di Sumber, Anda akan melihat pratinjau arahan preprocessor yang ditambahkan ke kode Anda.

      Cuplikan layar yang ditampilkan dalam Pilihan sumber dari menu Tindakan Cepat Menekan.

    • Jika Anda memilih di Sumber (atribut), Anda akan melihat pratinjau atribut SuppressMessageAttribute yang ditambahkan ke kode Anda.

      Cuplikan layar yang memperlihatkan dalam pilihan Sumber (atribut) dari menu Tindakan Cepat Menekan.

Menyembunyikan pelanggaran menggunakan Daftar Kesalahan

Untuk menyembunyikan pelanggaran menggunakan jendela Daftar Kesalahan, ikuti langkah-langkah berikut:

  1. Dari jendela Daftar Kesalahan, pilih aturan yang ingin Anda sembunyikan.

  2. Klik kanan, lalu pilih Sembunyikan>Di Sumber.

    Dialog Pratinjau Perubahan terbuka dan memperlihatkan pratinjau direktif peringatan C# #pragma atau arahan peringatan #Disable Visual Basic yang ditambahkan ke kode sumber.

    Cuplikan layar yang memperlihatkan kotak dialog Pratinjau Perubahan untuk menambahkan peringatan #pragma dalam file kode.

  3. Pilih Terapkan untuk menyimpan perubahan ke file kode Anda.

Mengecualikan diagnostik build Daftar Kesalahan

Jika Anda tidak melihat opsi menu Sembunyikan di jendela Daftar Kesalahan, pelanggaran kemungkinan berasal dari build dan bukan analisis langsung. Jendela Daftar Kesalahan menampilkan diagnostik, atau pelanggaran aturan, dari analisis kode langsung dan build. Karena diagnostik build dapat basi, misalnya, jika Anda mengedit kode untuk memperbaiki pelanggaran tetapi tidak membangunnya kembali, Anda tidak selalu dapat menekan diagnostik ini dari Daftar Kesalahan.

Diagnostik dari analisis langsung, atau IntelliSense, selalu diperbarui dengan sumber saat ini dan selalu dapat ditekan dari Daftar Kesalahan. Untuk mengecualikan diagnostik build dari pilihan Anda, ikuti langkah-langkah berikut:

  1. Dari daftar dropdown filter sumber Daftar Kesalahan, ubah pilihan dari Build + IntelliSense menjadi IntelliSense Saja.

    Cuplikan layar yang memperlihatkan filter sumber Daftar Kesalahan.

  2. Pilih diagnostik yang ingin Anda tekan dan lanjutkan seperti yang dijelaskan sebelumnya.

Sembunyikan pelanggaran menggunakan file supresi global

File penindasan global menggunakan atribut SuppressMessageAttribute untuk menekan pelanggaran kode.

Menggunakan file supresi global dari editor kode

Untuk menekan pelanggaran dengan file supresi global dengan menggunakan editor kode, ikuti langkah-langkah berikut:

  1. Di editor kode, letakkan kursor pada baris kode dengan pelanggaran dan tekan Ctrl+Period (.) atau Alt+Enter untuk membuka menu Tindakan Cepat.

  2. Pilih Sembunyikan <nomor> aturan, lalu pilih di File Supresi.

    Visual Studio membuat tab di editor kode yang berisi file supresi global baru.

Menggunakan file supresi global dari Daftar Kesalahan

Untuk menekan pelanggaran dengan file supresi global dengan menggunakan jendela Daftar Kesalahan, ikuti langkah-langkah berikut:

  1. Dari jendela Daftar Kesalahan, pilih aturan yang ingin Anda sembunyikan.

  2. Klik kanan, lalu pilih Sembunyikan>Dalam File Supresi.

    Kotak dialog Pratinjau Perubahan terbuka dan memperlihatkan pratinjau atribut yang SuppressMessageAttribute ditambahkan ke file supresi global.

    Cuplikan layar yang memperlihatkan kotak dialog Pratinjau Perubahan dengan atribut SuppressMessageAttribute dalam file supresi.

  3. Pilih Terapkan untuk menyimpan file supresi global.

Menyembunyikan semua pelanggaran saat ini

Menekan semua pelanggaran saat ini terkadang disebut sebagai dasar. Untuk menekan semua pelanggaran saat ini dalam solusi atau proyek, ikuti langkah-langkah berikut:

  1. Dari bilah menu Visual Studio, pilih Analisis>Build dan Tekan Masalah Aktif.

  2. Pilih Untuk solusi untuk menekan pelanggaran untuk seluruh solusi, atau pilih Untuk <nama> proyek guna menekan pelanggaran untuk proyek Anda saja.

Menyembunyikan pelanggaran menggunakan pengaturan proyek

Untuk menekan pelanggaran dengan menggunakan pengaturan proyek Penjelajah Solusi, ikuti langkah-langkah berikut:

  1. Dari Penjelajah Solusi, pilih proyek Anda.

  2. Klik kanan, lalu pilih Properti (atau tekan Alt + Enter).

  3. Dari jendela Properti , pilih Analisis Kode dari panel kiri, lalu hapus Sembunyikan hasil dari kode yang dihasilkan.

Menyembunyikan pelanggaran menggunakan seperangkat aturan

Dari editor seperangkat aturan, kosongkan kotak centang di samping namanya atau atur Tindakan ke Tidak Ada.

Supresi dalam sumber dan atribut SuppressMessageAttribute

Supresi dalam sumber (ISS) menggunakan SuppressMessageAttribute atribut untuk menyembunyikan peringatan. Anda dapat menambahkan SuppressMessageAttribute atribut ke file sumber di dekat segmen kode yang menghasilkan peringatan.

Anda dapat memasukkan atribut secara manual di editor kode, atau menambahkan atribut secara otomatis sebagai berikut:

  1. Di editor kode, letakkan kursor pada baris kode dengan pelanggaran dan tekan Ctrl+Period (.) atau Alt+Enter untuk membuka menu Tindakan Cepat.

  2. Pilih Sembunyikan atau konfigurasikan masalah>Sembunyikan <nomor> aturan dari menu Tindakan Cepat.

  3. Lakukan salah satu langkah berikut:

    • Pilih di Sumber (atribut).

      Visual Studio menambahkan SuppressMessageAttribute atribut ke kode Anda.

    • Pilih di File Supresi.

      Visual Studio membuat tab di editor kode yang berisi file supresi global baru dengan SuppressMessageAttribute atribut.

Atribut SuppressMessageAttribute adalah atribut bersyarah, yang disertakan dalam metadata rakitan kode terkelola Anda. Atribut ini hanya disertakan jika CODE_ANALYSIS simbol kompilasi ditentukan pada waktu kompilasi.

Hanya dalam kode C++ dan CLI, gunakan makro CA_SUPPRESS_MESSAGE atau CA_GLOBAL_SUPPRESS_MESSAGE di file header untuk menambahkan atribut .

Jika Anda memigrasikan proyek ke versi terbaru Visual Studio, Anda mungkin melihat sejumlah besar peringatan analisis kode. Jika Anda belum siap untuk memperbaiki peringatan, Anda dapat menyembunyikan semuanya dengan memilih Analisis>Membangun dan Menyembunyikan Masalah Aktif.

Catatan

Jangan gunakan supresi dalam sumber pada build rilis, untuk mencegah pengiriman metadata supresi dalam sumber secara tidak sengaja.

Format atribut SuppressMessageAttribute

AtributSuppressMessageAttribute memiliki format berikut:

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

Sifat atribut meliputi:

  • Category: Kategori aturan. Untuk informasi selengkapnya tentang kategori aturan analisis kode, lihat Aturan kualitas kode.

  • CheckId: Pengidentifikasi aturan. Dukungan mencakup nama pendek dan panjang untuk pengidentifikasi aturan. Nama pendeknya adalah CAXXXX; nama panjangnya adalah CAXXXX:FriendlyTypeName.

  • Justification: Teks yang digunakan untuk mendokumen alasan untuk menekan pesan.

  • MessageId: Pengidentifikasi unik masalah untuk setiap pesan.

  • Scope: Target di mana peringatan sedang ditekan. Jika target tidak ditentukan, sistem akan menetapkannya ke target atribut. Cakupan yang didukung meliputi:

    • module: Cakupan ini menekan peringatan terhadap rakitan. Ini adalah penindasan global yang berlaku untuk seluruh proyek.

    • resource: (Hanya FxCop Warisan) Cakupan ini menekan peringatan dalam info diagnostik yang ditulis ke file sumber daya yang merupakan bagian dari modul (rakitan). Cakupan ini tidak dibaca atau dihormati dalam pengkompilasi C#/VB untuk diagnostik penganalisis Roslyn, yang hanya menganalisis file sumber.

    • type: Cakupan ini menekan peringatan terhadap jenis.

    • member: Cakupan ini menekan peringatan terhadap anggota.

    • namespace: Cakupan ini menekan peringatan terhadap namespace itu sendiri. Ini tidak menekan peringatan terhadap jenis dalam namespace.

    • namespaceanddescendants: (Memerlukan pengompilasi versi 3.x atau lebih tinggi dan Visual Studio 2019 atau yang lebih baru) Cakupan ini menekan peringatan di namespace layanan dan semua simbol turunannya. Analisis warisan namespaceanddescendants mengabaikan nilai.

  • Target: Pengidentifikasi yang menentukan target tempat peringatan ditekan. Ini harus berisi nama komponen yang sepenuhnya memenuhi syarat.

Saat Anda melihat peringatan di Visual Studio, Anda dapat melihat contoh SuppressMessageAttribute dengan menambahkan supresi ke file supresi global. Atribut supresi dan properti yang diperlukan muncul di jendela pratinjau.

Penggunaan SuppressMessageAttribute

Peringatan analisis kode ditekan pada tingkat di SuppressMessageAttribute mana atribut diterapkan. Misalnya, atribut dapat diterapkan pada tingkat perakitan, modul, jenis, anggota, atau parameter. Tujuan penerapan atribut ini adalah untuk menggabungkan informasi penindasan dengan erat ke kode tempat pelanggaran terjadi.

Bentuk umum supresi mencakup kategori aturan dan pengidentifikasi aturan, yang berisi representasi opsional yang dapat dibaca manusia dari nama aturan. Contohnya:

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

Jika ada alasan performa yang ketat untuk meminimalkan metadata supresi sumber, nama aturan dapat dihilangkan. Kategori aturan dan ID aturannya bersama-sama membentuk pengidentifikasi aturan yang cukup unik. Contohnya:

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

Untuk alasan pemeliharaan, menghilangkan nama aturan tidak disarankan.

Sembunyikan pelanggaran selektif dalam isi metode

Atribut supresi dapat diterapkan ke metode, tetapi tidak dapat disematkan dalam isi metode. Semua pelanggaran aturan tertentu disembunyikan jika Anda menambahkan SuppressMessageAttribute atribut ke metode.

Dalam beberapa kasus, Anda mungkin ingin menyembunyikan instans tertentu dari pelanggaran. Pertimbangkan contoh di mana kode di masa mendatang tidak secara otomatis dikecualikan dari aturan analisis kode. Aturan analisis kode tertentu memungkinkan Anda untuk menyembunyikan instans pelanggaran tertentu dengan menggunakan MessageId properti SuppressMessageAttribute atribut. Secara umum, aturan warisan untuk pelanggaran pada simbol tertentu (variabel atau parameter lokal) menghormati MessageId properti. CA1500:VariableNamesShouldNotMatchFieldNames adalah contoh aturan tersebut. Namun, aturan warisan untuk pelanggaran pada kode yang dapat dieksekusi (non-simbol) tidak menghormati MessageId properti . Selain itu, penganalisis .NET Compiler Platform ("Roslyn") tidak menghormati MessageId properti .

Untuk menyembunyikan pelanggaran simbol tertentu dari aturan, tentukan nama simbol untuk MessageId properti SuppressMessageAttribute atribut. Contoh berikut menunjukkan kode dengan dua pelanggaran CA1500:VariableNamesShouldNotMatchFieldNames: satu pelanggaran untuk name variabel dan pelanggaran lain untuk variabel.age Hanya pelanggaran untuk age simbol yang disembunyikan.

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}");
    }
}

Supresi tingkat global

Alat analisis kode terkelola memeriksa SuppressMessageAttribute atribut yang diterapkan di tingkat perakitan, modul, jenis, anggota, atau parameter. Ini juga mengirimkan pelanggaran terhadap sumber daya dan namespace layanan. Pelanggaran ini harus diterapkan di tingkat global dan terlingkup dan ditargetkan. Misalnya, pesan berikut menyembunyikan pelanggaran namespace:

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

Untuk supresi tingkat global:

  • Ketika Anda menekan peringatan dengan namespace cakupan, itu menekan peringatan terhadap namespace itu sendiri. Ini tidak menekan peringatan terhadap jenis dalam namespace.

  • Target selalu berisi nama item yang sepenuhnya memenuhi syarat.

  • Supresi apa pun dapat diekspresikan dengan menentukan cakupan eksplisit. Supresi ini harus hidup di tingkat global. Anda tidak dapat menentukan supresi tingkat anggota dengan memodifikasi jenis.

  • Supresi tingkat global adalah satu-satunya cara untuk menekan pesan yang merujuk ke kode yang dihasilkan kompilator yang tidak memetakan ke sumber pengguna yang disediakan secara eksplisit. Misalnya, kode berikut menyembunyikan pelanggaran terhadap konstruktor yang dipancarkan pengkompilasi:

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

File supresi global

File supresi global mempertahankan supresi yang merupakan supresi tingkat global atau supresi yang tidak menentukan target. Misalnya, supresi untuk pelanggaran tingkat perakitan disimpan dalam file ini. Selain itu, beberapa ASP.NET supresi disimpan dalam file ini karena pengaturan tingkat proyek tidak tersedia untuk kode di belakang formulir. Visual Studio membuat dan menambahkan file supresi global ke proyek Anda saat pertama kali Anda memilih opsi Di File Supresi Proyek dari perintah Sembunyikan di jendela Daftar Kesalahan.

Cakupan supresi modul

Anda dapat menekan pelanggaran kualitas kode untuk seluruh perakitan dengan menggunakan module cakupan.

Misalnya, atribut berikut dalam file proyek GlobalSuppressions Anda menekan pelanggaran ConfigureAwait untuk proyek ASP.NET Core:

[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")]

Kode yang dihasilkan

Pengkompilasi kode terkelola dan beberapa alat eksternal menghasilkan kode untuk membantu pengembangan kode yang cepat. Kode yang dihasilkan pengkompilasi yang muncul dalam file sumber ditandai dengan GeneratedCodeAttribute atribut.

Untuk analisis kode sumber, Anda dapat menekan pesan dalam kode yang dihasilkan dalam file .editorconfig . Untuk informasi selengkapnya, baca Gambaran Umum Kode yang Dihasilkan.

Untuk analisis kode warisan, Anda dapat memilih apakah akan menyembunyikan peringatan analisis kode dan kesalahan untuk kode yang dihasilkan. Untuk informasi tentang cara menekan peringatan dan kesalahan tersebut, lihat Menyembunyikan peringatan analisis kode untuk kode yang dihasilkan.

Catatan

Analisis kode mengabaikan GeneratedCodeAttribute ketika diterapkan ke seluruh perakitan atau satu parameter.