Bagikan melalui


Menyembunyikan pelanggaran analisis kode

Jika Anda berkolaborasi dengan tim saat membuat kode, sering kali berguna untuk menunjukkan bahwa peringatan tidak berlaku. Mengabaikan pelanggaran pemeriksaan kode menunjukkan kepada anggota tim bahwa kode tersebut telah ditinjau, dan peringatan dapat diabaikan. Bagian berikut menjelaskan berbagai cara untuk menekan pelanggaran analisis kode menggunakan Visual Studio IDE.

Menyembunyikan 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 Menambahkan file EditorConfig ke proyek.

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

      Tangkapan layar yang menunjukkan pilihan Sumber dari menu Tindakan Cepat Ditahan.

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

      Cuplikan layar yang menunjukkan pemilihan Sumber (atribut) dari menu Tindakan Cepat Menekan.

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

Menyembunyikan semua pelanggaran saat ini

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

  1. Dari bilah menu Visual Studio, pilih Analyze>Build dan Menyembunyikan 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.

Supresi di dalam kode sumber dan atribut SuppressMessageAttribute

Supresi dalam sumber (ISS) menggunakan SuppressMessageAttribute atribut untuk menekan 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 Penekanan.

      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 mengabaikan semuanya dengan memilih Analisis>Build dan Abaikan Masalah Aktif.

Nota

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

Format atribut SuppressMessageAttribute

Atribut SuppressMessageAttribute memiliki format berikut:

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

Properti 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 identifikasi aturan. Nama pendeknya adalah CAXXXX; nama panjangnya adalah CAXXXX:FriendlyTypeName.

  • Justification: Teks yang digunakan untuk mendokumentasikan alasan menghilangkan pesan.

  • MessageId: Pengidentifikasi masalah yang unik 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 menghilangkan peringatan terhadap assembly. Ini adalah penindasan global yang berlaku untuk seluruh proyek.

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

    • type: Cakupan ini menghapus peringatan untuk tipe.

    • member: Cakupan ini menyembunyikan peringatan terhadap anggota program.

    • namespace: Cakupan ini menekan peringatan terhadap ruang nama itu sendiri. Ini tidak menekan peringatan terhadap tipe di dalam ruang nama.

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

  • Target: Pengidentifikasi yang menetapkan target di mana peringatan diabaikan. Ini harus berisi nama komponen yang berkualifikasi penuh.

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

Penggunaan SuppressMessageAttribute

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

Bentuk penindasan umum 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 dalam 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.

Mengabaikan pelanggaran tertentu di dalam metode (hanya analisis lama)

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

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

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

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. Pelanggaran ini harus diterapkan di tingkat global dan terlingkup dan ditargetkan. Misalnya, pesan berikut menghilangkan pelanggaran sebuah namespace.

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

Untuk penekanan tingkat global:

  • Ketika Anda mengabaikan peringatan dalam lingkup namespace, itu mengabaikan peringatan terhadap namespace itu sendiri. Ini tidak menghilangkan peringatan terhadap tipe dalam namespace.

  • Target selalu berisi nama item yang sepenuhnya memenuhi syarat.

  • Setiap penindasan dapat diekspresikan dengan menentukan cakupan eksplisit. Penekanan ini harus berada di tingkat global. Anda tidak dapat menentukan penekanan level anggota dengan memodifikasi tipe.

  • 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 mengabaikan pelanggaran pada konstruktor yang dihasilkan oleh kompilator.

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

File supresi global

File supresi global menyimpan supresi yang bersifat tingkat global atau supresi yang tidak menentukan target. Misalnya, penindasan untuk pelanggaran tingkat perakitan disimpan dalam file ini. Selain itu, beberapa pembatalan ASP.NET disimpan dalam file ini karena pengaturan tingkat proyek tidak tersedia untuk kode yang ada di balik 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 penindasan modul

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

Misalnya, atribut berikut dalam file proyek GlobalSuppressions Anda menghentikan 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 kompiler yang muncul dalam file sumber ditandai dengan GeneratedCodeAttribute atribut .

Untuk analisis kode sumber, Anda dapat menyembunyikan pesan pada kode yang dihasilkan dalam file .editorconfig. Untuk informasi selengkapnya, lihat Mengecualikan kode yang dihasilkan.

Untuk analisis kode warisan, Anda dapat memilih apakah akan menekan 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.

Nota

Analisis kode mengabaikan GeneratedCodeAttribute ketika diterapkan ke seluruh rakitan atau parameter tunggal.