Gambaran umum analisis kode sumber .NET
Penganalisis platform kompilator .NET (Roslyn) memeriksa kode C# atau Visual Basic Anda untuk masalah kualitas kode dan gaya. Mulai dari .NET 5, penganalisis ini disertakan dengan .NET SDK dan Anda tidak perlu menginstalnya secara terpisah. Jika proyek Anda menargetkan .NET 5 atau yang lebih baru, analisis kode diaktifkan secara default. Jika proyek Anda menargetkan implementasi .NET yang berbeda, misalnya, .NET Core, .NET Standard, atau .NET Framework, Anda harus mengaktifkan analisis kode secara manual dengan mengatur properti EnableNETAnalyzers ke true
.
Jika Anda tidak ingin pindah ke .NET 5+ SDK, memiliki proyek .NET Framework gaya non-SDK, atau lebih suka model berbasis paket NuGet, penganalisis juga tersedia dalam paket NuGet Microsoft.CodeAnalysis.NetAnalyzers. Anda mungkin lebih suka model berbasis paket untuk pembaruan versi sesuai permintaan.
Catatan
Penganalisis .NET adalah agnostik kerangka kerja target. Artinya, proyek Anda tidak perlu menargetkan implementasi .NET tertentu. Penganalisis bekerja untuk proyek yang menargetkan .NET 5+ serta versi .NET sebelumnya, seperti .NET Core 3.1 dan .NET Framework 4.7.2. Namun, untuk mengaktifkan analisis kode menggunakan properti EnableNETAnalyzers , proyek Anda harus mereferensikan proyek SDK.
Jika pelanggaran aturan ditemukan oleh penganalisis, pelanggaran tersebut dilaporkan sebagai saran, peringatan, atau kesalahan, tergantung pada bagaimana setiap aturan dikonfigurasi. Pelanggaran analisis kode muncul dengan awalan "CA" atau "IDE" untuk membedakannya dari kesalahan kompilator.
Analisis kualitas kode
Aturan analisis kualitas kode ("CAxxxx") memeriksa kode C# atau Visual Basic Anda untuk keamanan, performa, desain, dan masalah lainnya. Analisis diaktifkan, secara default, untuk proyek yang menargetkan .NET 5 atau yang lebih baru. Anda dapat mengaktifkan analisis kode pada proyek yang menargetkan versi .NET sebelumnya dengan mengatur properti EnableNETAnalyzers ke true
. Anda juga dapat menonaktifkan analisis kode untuk proyek Anda dengan menyetel EnableNETAnalyzers
ke false
.
Tip
Jika Anda menggunakan Visual Studio, banyak aturan penganalisis memiliki perbaikan kode terkait yang dapat Anda terapkan untuk memperbaiki masalah. Perbaikan kode ditampilkan di menu ikon bola lampu.
Aturan yang diaktifkan
Aturan berikut diaktifkan, secara default, sebagai kesalahan atau peringatan di .NET 8. Aturan tambahan diaktifkan sebagai saran.
ID diagnostik | Kategori | Tingkat keparahan | Versi ditambahkan | Deskripsi |
---|---|---|---|---|
CA1416 | Interoperabilitas | Peringatan | .NET 5 | Memvalidasi kompatibilitas platform |
CA1417 | Interoperabilitas | Peringatan | .NET 5 | Jangan gunakan OutAttribute pada parameter string untuk P/Invokes |
CA1418 | Interoperabilitas | Peringatan | .NET 6 | Menggunakan string platform yang valid |
CA1420 | Interoperabilitas | Peringatan | .NET 7 | Menggunakan fitur yang memerlukan marshalling runtime saat dinonaktifkan akan menghasilkan pengecualian run-time |
CA1422 | Interoperabilitas | Peringatan | .NET 7 | Memvalidasi kompatibilitas platform |
CA1831 | Performa | Peringatan | .NET 5 | Gunakan AsSpan alih-alih pengindeks berbasis rentang untuk string jika sesuai |
CA1856 | Performa | Kesalahan | .NET 8 | Penggunaan atribut yang ConstantExpected salah |
CA1857 | Performa | Peringatan | .NET 8 | Konstanta diharapkan untuk parameter |
CA2013 | Keandalan | Peringatan | .NET 5 | Jangan gunakan ReferenceEquals dengan jenis nilai |
CA2014 | Keandalan | Peringatan | .NET 5 | Jangan gunakan stackalloc dalam perulangan |
CA2015 | Keandalan | Peringatan | .NET 5 | Jangan tentukan finalizer untuk jenis yang berasal dari MemoryManager<T> |
CA2017 | Keandalan | Peringatan | .NET 6 | Jumlah parameter tidak cocok |
CA2018 | Keandalan | Peringatan | .NET 6 | Argumen count untuk Buffer.BlockCopy menentukan jumlah byte yang akan disalin |
CA2021 | Keandalan | Peringatan | .NET 8 | Jangan memanggil Enumerable.Cast<T> atau Enumerable.OfType<T> dengan tipe yang tidak kompatibel |
CA2022 | Keandalan | Peringatan | .NET 9 | Hindari bacaan yang tidak tepat dengan Stream.Read |
CA2200 | Penggunaan | Peringatan | .NET 5 | Memunculkan ulang untuk mempertahankan detail tumpukan |
CA2247 | Penggunaan | Peringatan | .NET 5 | Argumen yang diteruskan ke TaskCompletionSource konstruktor harus enum TaskCreationOptions alih-alih TaskContinuationOptions |
CA2252 | Penggunaan | Kesalahan | .NET 6 | Ikut serta dalam fitur pratinjau |
CA2255 | Penggunaan | Peringatan | .NET 6 | Atribut ModuleInitializer tidak boleh digunakan dalam pustaka |
CA2256 | Penggunaan | Peringatan | .NET 6 | Semua anggota yang dideklarasikan dalam antarmuka induk harus memiliki implementasi dalam DynamicInterfaceCastableImplementation antarmuka -atribut |
CA2257 | Penggunaan | Peringatan | .NET 6 | Anggota yang ditentukan pada antarmuka dengan DynamicInterfaceCastableImplementationAttribute harus static |
CA2258 | Penggunaan | Peringatan | .NET 6 | Menyediakan DynamicInterfaceCastableImplementation antarmuka di Visual Basic tidak didukung |
CA2259 | Penggunaan | Peringatan | .NET 7 | ThreadStatic hanya memengaruhi bidang statis |
CA2260 | Penggunaan | Peringatan | .NET 7 | Gunakan parameter jenis yang benar |
CA2261 | Penggunaan | Peringatan | .NET 8 | Jangan gunakan ConfigureAwaitOptions.SuppressThrowing dengan Task<TResult> |
Anda dapat mengubah tingkat keparahan aturan ini untuk menonaktifkannya atau meningkatkannya menjadi kesalahan. Anda juga dapat mengaktifkan lebih banyak aturan.
- Untuk daftar aturan yang disertakan dengan setiap versi .NET SDK, lihat Rilis analyzer.
- Untuk daftar semua aturan kualitas kode, lihat Aturan kualitas kode.
Mengaktifkan aturan tambahan
Mode analisis mengacu pada konfigurasi analisis kode yang telah ditentukan sebelumnya di mana tidak ada, beberapa, atau semua aturan diaktifkan. Dalam mode analisis default (Default
), hanya sejumlah kecil aturan yang diaktifkan sebagai peringatan build. Anda dapat mengubah mode analisis untuk proyek Anda dengan mengatur <AnalysisMode>
properti dalam file proyek. Nilai yang diizinkan adalah:
Nilai | Deskripsi |
---|---|
None |
Semua aturan dinonaktifkan. Anda dapat secara selektif memilih aturan individual untuk mengaktifkannya. |
Default |
Mode default, saat aturan tertentu diaktifkan sebagai peringatan build, aturan tertentu diaktifkan sebagai saran IDE Visual Studio, dan sisanya dinonaktifkan. |
Minimum |
Mode yang lebih agresif daripada Default mode. Saran tertentu yang sangat disarankan untuk penegakan build diaktifkan sebagai peringatan build. Untuk melihat aturan mana yang disertakan, periksa %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.editorconfig file. |
Recommended |
Mode yang lebih agresif daripada Minimum mode, di mana lebih banyak aturan diaktifkan sebagai peringatan build. Untuk melihat aturan mana yang disertakan, periksa %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.editorconfig file. |
All |
Semua aturan diaktifkan sebagai peringatan* build. Anda dapat secara selektif keluar dari aturan individual untuk menonaktifkannya. * Aturan berikut tidak diaktifkan dengan mengatur AnalysisMode ke All atau dengan mengatur AnalysisLevel ke latest-all : CA1017, CA1045, CA1005, CA1014, CA1060, CA1021, dan aturan penganalisis metrik kode (CA1501, CA1502, CA1505, CA1506, dan CA1509). Aturan warisan ini mungkin tidak digunakan lagi dalam versi mendatang. Namun, Anda masih dapat mengaktifkannya satu per satu menggunakan dotnet_diagnostic.CAxxxx.severity = <severity> entri. |
Mulai dari .NET 6, Anda dapat menghilangkan <AnalysisMode>
demi nilai majemuk untuk <AnalysisLevel>
properti . Misalnya, nilai berikut memungkinkan sekumpulan aturan yang direkomendasikan untuk rilis terbaru: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. Untuk informasi selengkapnya, lihat AnalysisLevel
.
Untuk menemukan tingkat keparahan default untuk setiap aturan yang tersedia dan apakah aturan diaktifkan dalam Default
mode analisis atau tidak, lihat daftar lengkap aturan.
Perlakukan peringatan sebagai kesalahan
Jika Anda menggunakan -warnaserror
bendera saat membuat proyek, semua peringatan analisis kode juga diperlakukan sebagai kesalahan. Jika Anda tidak ingin peringatan kualitas kode (CAxxxx) diperlakukan sebagai kesalahan di hadapan -warnaserror
, Anda dapat mengatur CodeAnalysisTreatWarningsAsErrors
properti MSBuild ke false
dalam file proyek Anda.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Anda masih akan melihat peringatan analisis kode apa pun, tetapi tidak akan merusak build Anda.
Pembaruan terkini
Secara default, Anda akan mendapatkan aturan analisis kode terbaru dan tingkat keparahan aturan default saat Anda meningkatkan ke versi .NET SDK yang lebih baru. Jika Anda tidak ingin perilaku ini, misalnya, jika Anda ingin memastikan bahwa tidak ada aturan baru yang diaktifkan atau dinonaktifkan, Anda dapat mengambil alihnya dengan salah satu cara berikut:
Atur
AnalysisLevel
properti MSBuild ke nilai tertentu untuk mengunci peringatan ke set tersebut. Saat meningkatkan ke SDK yang lebih baru, Anda masih akan mendapatkan perbaikan bug untuk peringatan tersebut, tetapi tidak ada peringatan baru yang akan diaktifkan dan tidak ada peringatan yang ada yang akan dinonaktifkan. Misalnya, untuk mengunci sekumpulan aturan ke aturan yang dikirim dengan versi 5.0 dari .NET SDK, tambahkan entri berikut ke file proyek Anda.<PropertyGroup> <AnalysisLevel>5.0</AnalysisLevel> </PropertyGroup>
Tip
Nilai default untuk
AnalysisLevel
properti adalahlatest
, yang berarti Anda selalu mendapatkan aturan analisis kode terbaru saat Anda pindah ke versi .NET SDK yang lebih baru.Untuk informasi selengkapnya, dan untuk melihat daftar nilai yang mungkin, lihat AnalysisLevel.
Instal paket NuGet Microsoft.CodeAnalysis.NetAnalyzers untuk memisahkan pembaruan aturan dari pembaruan .NET SDK. Untuk proyek yang menargetkan .NET 5+, menginstal paket akan menonaktifkan penganalisis SDK bawaan. Anda akan mendapatkan peringatan build jika SDK berisi versi rakitan penganalisis yang lebih baru daripada paket NuGet. Untuk menonaktifkan peringatan, atur properti ke
_SkipUpgradeNetAnalyzersNuGetWarning
true
.Catatan
Jika Anda menginstal paket NuGet Microsoft.CodeAnalysis.NetAnalyzers, Anda tidak boleh menambahkan properti EnableNETAnalyzers ke file proyek atau file Directory.Build.props . Ketika paket NuGet diinstal dan
EnableNETAnalyzers
properti diatur ketrue
, peringatan build dihasilkan.
Analisis gaya kode
Aturan analisis gaya kode ("IDExxxx") memungkinkan Anda menentukan dan mempertahankan gaya kode yang konsisten di basis kode Anda. Pengaturan pengaktifan default adalah:
Build baris perintah: Analisis gaya kode dinonaktifkan, secara default, untuk semua proyek .NET pada build baris perintah.
Mulai dari .NET 5, Anda dapat mengaktifkan analisis gaya kode pada build, baik di baris perintah maupun di dalam Visual Studio. Pelanggaran gaya kode muncul sebagai peringatan atau kesalahan dengan awalan "IDE". Ini memungkinkan Anda menerapkan gaya kode yang konsisten pada waktu build.
Visual Studio: Analisis gaya kode diaktifkan, secara default, untuk semua proyek .NET di dalam Visual Studio sebagai tindakan cepat pemfaktoran ulang kode.
Untuk daftar lengkap aturan analisis gaya kode, lihat Aturan gaya kode.
Aktifkan pada build
Dengan .NET 5 SDK dan versi yang lebih baru, Anda dapat mengaktifkan analisis gaya kode saat membangun dari baris perintah dan di Visual Studio. (Namun, karena alasan performa, beberapa aturan gaya kode masih hanya akan berlaku di Ide Visual Studio.)
Ikuti langkah-langkah ini untuk mengaktifkan analisis gaya kode pada build:
Atur properti MSBuild EnforceCodeStyleInBuild ke
true
.Dalam file .editorconfig, konfigurasikan setiap aturan gaya kode "IDE" yang ingin Anda jalankan pada build sebagai peringatan atau kesalahan. Contohnya:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
Tip
Mulai dari .NET 9, Anda juga dapat menggunakan format opsi untuk menentukan tingkat keparahan dan membuatnya dihormati pada waktu build. Contohnya:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning
Atau, Anda dapat mengonfigurasi seluruh kategori untuk menjadi peringatan atau kesalahan, secara default, lalu secara selektif menonaktifkan aturan dalam kategori yang tidak ingin Anda jalankan pada build. Contohnya:
[*.{cs,vb}] # Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings) dotnet_analyzer_diagnostic.category-Style.severity = warning # IDE0040: Accessibility modifiers required (disabled on build) dotnet_diagnostic.IDE0040.severity = silent
Menyembunyikan peringatan
Salah satu cara untuk menekan pelanggaran aturan adalah dengan mengatur opsi tingkat keparahan untuk ID aturan tersebut ke none
dalam file EditorConfig. Contohnya:
dotnet_diagnostic.CA1822.severity = none
Untuk informasi selengkapnya dan cara lain untuk menekan peringatan, lihat Cara menekan peringatan analisis kode.
Penganalisis pihak ketiga
Selain penganalisis .NET resmi, Anda juga dapat menginstal penganalisis pihak ketiga, seperti StyleCop, Roslynator, XUnit Analyzers, dan Sonar Analyzer.