C# Opsi Kompilator untuk melaporkan kesalahan dan peringatan

Opsi berikut mengontrol bagaimana kompilator melaporkan kesalahan dan peringatan. Sintaksis MSBuild baru ditampilkan dalam Huruf tebal. Sintaks csc.exe yang lebih lama ditampilkan dalam huruf code style.

  • WarningLevel / -warn: Mengatur tingkat peringatan.
  • AnalysisLevel: Mengatur tingkat peringatan opsional.
  • TreatWarningsAsErrors / -warnaserror: Memperlakukan semua peringatan sebagai kesalahan
  • WarningsAsErrors / -warnaserror: Memperlakukan satu atau beberapa peringatan sebagai kesalahan
  • WarningsNotAsErrors / -warnnotaserror: Memperlakukan satu atau beberapa peringatan bukan sebagai kesalahan
  • NoWarn / -nowarn: Atur daftar peringatan yang dinonaktifkan.
  • CodeAnalysisRuleSet / -ruleset: Menentukan file seperangkat aturan yang menonaktifkan diagnostik tertentu.
  • ErrorLog / -errorlog: Menentukan file untuk mencatat semua diagnostik kompilator dan penganalisis.
  • ReportAnalyzer / -reportanalyzer: Melaporkan informasi penganalisis tambahan, seperti waktu eksekusi.

WarningLevel

Opsi WarningLevel menentukan tingkat peringatan yang akan ditampilkan oleh kompilator.

<WarningLevel>3</WarningLevel>

Nilai elemen adalah tingkat peringatan yang ingin Anda tampilkan untuk kompilasi: Angka yang lebih rendah hanya menunjukkan peringatan tingkat keparahan yang tinggi. Angka yang lebih tinggi menunjukkan lebih banyak peringatan. Nilai harus nol atau bilangan bulat positif:

Tingkat peringatan Makna
0 Menonaktifkan emisi semua pesan peringatan.
1 Menampilkan pesan peringatan yang parah.
2 Menampilkan peringatan level 1 ditambah peringatan tertentu yang tidak terlalu parah, seperti peringatan tentang menyembunyikan anggota kelas.
3 Menampilkan peringatan level 2 ditambah peringatan tertentu yang tidak terlalu parah, seperti peringatan tentang ekspresi yang selalu bernilai true atau false.
4 (default) Menampilkan semua peringatan level 3 ditambah peringatan informasi.

Peringatan

Baris perintah kompilator menerima nilai lebih besar dari 4 untuk mengaktifkan peringatan gelombang peringatan. Namun, SDK .NET mengatur WarningLevel agar sesuai dengan AnalysisLevel di file proyek Anda.

Untuk mendapatkan informasi tentang kesalahan atau peringatan, Anda dapat mencari kode kesalahan di Indeks Bantuan. Untuk cara lain mendapatkan informasi tentang kesalahan atau peringatan, lihat Kesalahan Kompilator C#. Gunakan TreatWarningsAsErrors untuk memperlakukan semua peringatan sebagai kesalahan. Gunakan DisabledWarnings untuk menonaktifkan peringatan tertentu.

Tingkat analisis

Opsi AnalysisLevel menentukan gelombang peringatan dan penganalisis tambahan untuk diaktifkan. Peringatan gelombang peringatan adalah pemeriksaan tambahan yang meningkatkan kode Anda, atau memastikannya akan kompatibel dengan rilis mendatang. Penganalisis menyediakan kemampuan seperti lint untuk meningkatkan kode Anda.

<AnalysisLevel>preview</AnalysisLevel>
Tingkat analisis Makna
5 Menampilkan semua peringatan gelombang 5 peringatan opsional.
6 Menampilkan semua peringatan gelombang 6 peringatan opsional.
7 Menampilkan semua peringatan gelombang 7 peringatan opsional.
terbaru (default) Menampilkan semua peringatan informasi hingga dan termasuk rilis saat ini.
pratinjau Menampilkan semua peringatan informasi hingga dan termasuk rilis pratinjau terbaru.
tidak ada Menonaktifkan semua peringatan informasi.

Untuk informasi selengkapnya tentang peringatan opsional, lihat Gelombang peringatan.

Untuk mendapatkan informasi tentang kesalahan atau peringatan, Anda dapat mencari kode kesalahan di Indeks Bantuan. Untuk cara lain mendapatkan informasi tentang kesalahan atau peringatan, lihat Kesalahan Kompilator C#. Gunakan TreatWarningsAsErrors untuk memperlakukan semua peringatan sebagai kesalahan. Gunakan NoWarn untuk menonaktifkan peringatan tertentu.

TreatWarningsAsErrors

Opsi TreatWarningsAsErrors memperlakukan semua peringatan sebagai kesalahan. Anda juga dapat menggunakan WarningsAsErrors untuk mengatur hanya beberapa peringatan sebagai kesalahan. Jika Anda mengaktifkan TreatWarningsAsErrors, Anda dapat menggunakan WarningsNotAsErrors untuk mencantumkan peringatan yang tidak boleh dianggap sebagai kesalahan.

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

Semua pesan peringatan sebagai gantinya dilaporkan sebagai kesalahan. Proses build berhenti (tidak ada file output yang dibuat). Secara default, TreatWarningsAsErrors tidak berlaku, yang berarti peringatan tidak mencegah pembuatan file output. Secara opsional, jika Anda ingin hanya beberapa peringatan tertentu yang diperlakukan sebagai kesalahan, Anda dapat menentukan daftar nomor peringatan yang dipisahkan koma untuk diperlakukan sebagai kesalahan. Kumpulan semua peringatan nullabilitas dapat ditentukan dengan singkatan Nullable (dapat diubah ke null). Gunakan WarningLevel untuk menentukan tingkat peringatan yang Anda inginkan untuk ditampilkan oleh kompilator. Gunakan NoWarn untuk menonaktifkan peringatan tertentu.

Penting

Ada dua perbedaan tipis antara menggunakan elemen <TreatWarningsAsErrors> di file csproj Anda, dan menggunakan switch baris perintah warnaserror MSBuild. TreatWarningsAsErrors hanya memengaruhi kompilator C#, bukan tugas MSBuild lainnya dalam file csproj Anda. Switch baris perintah warnaserror memengaruhi semua tugas. Kedua, kompilator tidak menghasilkan output apa pun pada peringatan apa pun saat TreatWarningsAsErrors digunakan. Kompilator menghasilkan output saat switch baris perintah warnaserror digunakan.

WarningsAsErrors dan WarningsNotAsErrors

Opsi WarningsAsErrors dan WarningsNotAsErrors mengambil alih opsi TreatWarningsAsErrors untuk daftar peringatan. Opsi ini dapat digunakan dengan semua peringatan CS. Prefiks "CS" bersifat opsional. Anda dapat menggunakan angka, atau "CS" diikuti dengan kesalahan atau nomor peringatan. Untuk elemen lain yang memengaruhi peringatan, lihat Properti MSBuild umum.

Mengaktifkan peringatan 0219 dan 0168 sebagai kesalahan:

<WarningsAsErrors>0219,CS0168</WarningsAsErrors>

Menonaktifkan peringatan yang sama dengan kesalahan:

<WarningsNotAsErrors>0219,CS0168</WarningsNotAsErrors>

Anda menggunakan WarningsAsErrors untuk mengonfigurasi serangkaian peringatan sebagai kesalahan. Gunakan WarningsNotAsErrors untuk mengonfigurasi serangkaian peringatan yang seharusnya bukan kesalahan jika Anda telah mengatur semua peringatan sebagai kesalahan.

NoWarn

Opsi NoWarn memungkinkan Anda menekan pengompilasi agar tidak menampilkan satu atau beberapa peringatan, di mana warningnumber1, warningnumber2 adalah nomor peringatan yang Anda inginkan untuk ditekan pengompilasi. Pisahkan beberapa nomor peringatan dengan koma.

<NoWarn>warningnumber1,warningnumber2</NoWarn>

Anda hanya perlu menentukan bagian numerik dari pengidentifikasi peringatan. Misalnya, jika Anda ingin menyembunyikan CS0028, Anda dapat menentukan <NoWarn>28</NoWarn>. Kompilator secara diam-diam mengabaikan nomor peringatan yang diteruskan ke NoWarn yang valid dalam rilis sebelumnya, tetapi telah dihapus. Misalnya, CS0679 valid dalam kompilator di Visual Studio .NET 2002 tetapi kemudian dihapus.

Peringatan berikut tidak dapat ditekan oleh opsi NoWarn :

  • Peringatan Kompilator (tingkat 1) CS2002
  • Peringatan Kompilator (tingkat 1) CS2023
  • Peringatan Kompilator (tingkat 1) CS2029

Perhatikan bahwa peringatan dimaksudkan untuk menjadi indikasi potensi masalah dengan kode Anda, jadi Anda harus memahami risiko menonaktifkan peringatan tertentu. Gunakan NoWarn hanya ketika Anda yakin bahwa peringatan adalah positif palsu dan mungkin bukan bug runtime.

Anda mungkin ingin menggunakan pendekatan yang lebih ditargetkan untuk menonaktifkan peringatan:

  • Sebagian besar kompilator menyediakan cara untuk menonaktifkan peringatan hanya untuk baris kode tertentu, sehingga Anda masih dapat meninjau peringatan jika terjadi di tempat lain dalam proyek yang sama. Untuk menekan peringatan hanya di bagian tertentu dari kode di C#, gunakan peringatan #pragma.

  • Jika tujuan Anda adalah untuk melihat output yang lebih ringkas dan terfokus di log build, Anda mungkin ingin mengubah verbositas log build. Untuk informasi selengkapnya, lihat Cara: Menampilkan, menyimpan, dan mengonfigurasi file log build.

Untuk menambahkan nomor peringatan ke nilai yang ditetapkan sebelumnya untuk NoWarn tanpa menimpanya, referensi $(NoWarn) seperti yang ditunjukkan dalam contoh berikut:

   <NoWarn>$(NoWarn);newwarningnumber3;newwarningnumber4</NoWarn>

CodeAnalysisRuleSet

Menentukan file seperangkat aturan yang mengonfigurasi diagnostik tertentu.

<CodeAnalysisRuleSet>MyConfiguration.ruleset</CodeAnalysisRuleSet>

Di mana MyConfiguration.ruleset adalah jalur ke file seperangkat aturan. Untuk informasi selengkapnya tentang menggunakan kumpulan aturan, lihat artikel di dokumentasi Visual Studio tentang Seperangkat aturan.

ErrorLog

Menentukan file untuk mencatat semua diagnostik kompilator dan penganalisis.

<ErrorLog>compiler-diagnostics.sarif</ErrorLog>

Opsi ErrorLog menyebabkan kompilator mengeluarkan log Static Analysis Results Interchange Format (SARIF). Log SARIF biasanya dibaca oleh alat yang menganalisis hasil dari diagnostik kompilator dan penganalisis.

Anda dapat menentukan format SARIF menggunakan argumen version ke elemen ErrorLog:

<ErrorLog>logVersion21.json,version=2.1</ErrorLog>

Pemisah dapat berupa koma (,) atau titik koma (;). Nilai yang valid untuk versi adalah: "1", "2", dan "2.1". Defaultnya adalah "1". "2" dan "2.1" keduanya berarti SARIF versi 2.1.0.

ReportAnalyzer

Melaporkan informasi penganalisis tambahan, seperti waktu eksekusi.

<ReportAnalyzer>true</ReportAnalyzer>

Opsi ReportAnalyzer menyebabkan kompilator mengeluarkan informasi log MSBuild tambahan yang merinci karakteristik performa penganalisis dalam build. Ini biasanya digunakan oleh pembuat penganalisis sebagai bagian dari validasi penganalisis.

Penting

Informasi log tambahan yang dihasilkan oleh tanda ini hanya dibuat ketika opsi baris perintah -verbosity:detailed digunakan. Lihat artikel pengalihan dalam dokumentasi MSBuild untuk informasi selengkapnya.