Kesalahan dan peringatan yang terkait dengan generator kode sumber dan pencegat

Kesalahan berikut terjadi ketika kompilator memuat generator sumber atau pencegat selama kompilasi:

  • CS9137: Fitur 'pencegat' tidak diaktifkan di namespace layanan ini. Tambahkan <Features>InterceptorsPreview</Features> ke proyek Anda.
  • CS9138: Metode 'method' tidak dapat digunakan sebagai interceptor karena tipe induknya memiliki parameter tipe.
  • CS9139: Tidak dapat mencegat: kompilasi tidak berisi file dengan jalur.
  • CS9140: Tidak dapat mengintersepsi: kompilasi tidak berisi file dengan jalur 'path'. Apakah Anda bermaksud menggunakan jalur 'candidatePath'?
  • CS9141: Baris dan nomor karakter yang disediakan tidak merujuk ke nama metode yang dapat dicegat, melainkan ke token 'token'.
  • CS9142: File yang diberikan memiliki n baris, yang lebih sedikit daripada nomor baris m yang disediakan.
  • CS9143: Baris yang diberikan panjangnya adalah c karakter, yang lebih sedikit daripada jumlah karakter n yang disediakan.
  • CS9144: Tidak dapat mencegat metode M dengan pencegat V karena tanda tangan tidak cocok.
  • CS9145: Tidak dapat mencegat: Jalur tidak dipetakan. Diharapkan jalur yang dipetakan.
  • CS9146: Metode pencegat harus merupakan metode anggota biasa.
  • CS9147: Baris dan nomor karakter yang disediakan tidak mengacu pada awal token 'token'. Apakah Anda bermaksud menggunakan baris 'n' dan karakter 'c'?
  • CS9148: Interceptor harus memiliki parameter yang this cocok.
  • CS9149: Interceptor tidak boleh memiliki this parameter karena metode tidak memiliki this parameter.
  • CS9150: Interceptor tidak dapat memiliki null path file.
  • CS9151: Nama metode yang mungkin M tidak dapat dicegat karena tidak sedang dipanggil.
  • CS9152: Tidak dapat mengintersepsi panggilan pada file dengan jalur 'path' karena beberapa file dalam kompilasi memiliki jalur ini.
  • CS9153: Panggilan yang ditunjukkan dicegat beberapa kali.
  • CS9155: Tidak dapat mencegat panggilan dengan M karena tidak dapat diakses dalam V.
  • CS9156: Tidak dapat mencegat panggilan ke M dengan V karena perbedaan pengubah 'lingkup' atau atribut [UnscopedRef].
  • CS9157: Nomor garis dan karakter yang diberikan kepada InterceptsLocationAttribute harus positif.
  • CS9160: Operator 'nameof' tidak dapat dicegah.
  • CS9161: Pencegat tidak dapat ditandai dengan UnmanagedCallersOnlyAttribute.
  • CS9177: Metode 'method' harus nongenerik atau memiliki jumlah parameter tipe 'arity' agar sesuai dengan 'target'.
  • CS9178: Metode 'metode' harus non-generik agar sesuai dengan 'target'.
  • CS9206: Pencegat tidak dapat dideklarasikan dalam ruang nama global.
  • CS9207: Tidak dapat mengintersep 'method' karena itu bukan pemanggilan sebuah metode anggota biasa.
  • CS9231: Argumen data ke InterceptsLocationAttribute tidak dalam format yang benar.
  • CS9232: Versi 'versi' dari format interseptor tidak didukung. Versi terbaru yang didukung adalah '1'.
  • CS9233: Tidak dapat mencegat panggilan dalam file 'file' karena diduplikasi di tempat lain dalam kompilasi.
  • CS9234: Tidak dapat mencegat panggilan dalam file 'file' karena file yang cocok tidak ditemukan dalam kompilasi.
  • CS9235: Argumen data ke InterceptsLocationAttribute mengacu pada posisi yang tidak valid dalam file 'file'.

Peringatan berikut terjadi ketika pengkompilasi memuat generator sumber atau pencegat selama kompilasi:

  • CS8032: Instans penganalisis 'analyzer' tidak dapat dibuat dari 'assembly' : 'reason'.
  • CS8033: Assembly 'assembly' tidak berisi penganalisis apa pun.
  • CS8034: Tidak dapat memuat perakitan 'assembly' Analyzer: 'reason'
  • CS8040: Melewati beberapa tipe dalam rakitan penganalisis 'assembly' karena ReflectionTypeLoadException : 'exception'.
  • CS8700: Beberapa file konfigurasi penganalisis tidak dapat berada di direktori yang sama ('direktori').
  • CS8784: Generator 'generator' gagal diinisialisasi. Generator ini tidak akan berkontribusi pada output, dan akibatnya kesalahan kompilasi dapat terjadi. Pengecualian bertipe 'exception' dengan pesan 'message'.
  • CS8785: Generator 'generator' gagal menghasilkan kode sumber. Ini tidak akan berkontribusi pada output, dan kesalahan kompilasi dapat terjadi sebagai akibatnya. Pengecualian bertipe 'exception' dengan pesan 'message'.
  • CS8850: Assembly 'assembly' yang berisi tipe 'type' mereferensikan .NET Framework, yang tidak didukung.
  • CS9057: Rakitan penganalisis 'assembly' tidak dapat digunakan karena merujuk ke versi 'version' dari pengkompilasi, yang lebih baru daripada versi 'currentVersion' yang sedang berjalan.
  • CS9067: Referensi penganalisis 'reference' ditentukan lebih dari sekali
  • CS9154: Mencegat panggilan ke M dengan pencegat V, tetapi tanda tangan tidak cocok.
  • CS9158: Kebernullan tipe referensi dalam tipe pengembalian tidak cocok dengan metode yang dapat diintersepsi.
  • CS9159: Kesesuaian untuk null dari jenis referensi pada parameter tidak sesuai dengan metode yang dapat diintersepsi.
  • CS9270: 'InterceptsLocationAttribute(string, int, int)' tidak didukung. Pindah ke pembuatan berbasis 'InterceptableLocation' dari atribut ini sebagai gantinya. (https://github.com/dotnet/roslyn/issues/72133)

Kesalahan dan peringatan ini mengikuti tema berikut:

Kegagalan generator sumber

  • CS8784: Generator 'generator' gagal diinisialisasi. Generator ini tidak akan berkontribusi pada output, dan akibatnya kesalahan kompilasi dapat terjadi. Terjadi exception bertipe 'exception' dengan pesan 'message'.
  • CS8785: Generator 'generator' gagal menghasilkan kode sumber. Generator ini tidak akan berkontribusi pada output, dan akibatnya kesalahan kompilasi dapat terjadi. Pengecualian bertipe 'exception' dengan pesan 'message'.

Peringatan ini menunjukkan bahwa generator sumber melemparkan pengecualian yang tidak tertangani selama kompilasi. Generator sumber berjalan sebagai bagian dari alur build, dan kegagalan mencegah generator menyumbangkan outputnya ke kompilasi. Untuk informasi selengkapnya tentang menerapkan generator sumber, lihat Generator Sumber.

Untuk memperbaiki peringatan ini, ikuti panduan ini:

  • Periksa detail pengecualian lengkap dalam output build untuk mengidentifikasi akar penyebab (CS8784, CS8785). Pesan peringatan mencakup jenis pengecualian, pesan, dan pelacakan tumpukan, yang dapat membantu Anda atau pembuat generator mendiagnosis kegagalan.
  • Pastikan semua dependensi yang diperlukan untuk generator sumber tersedia dalam proyek (CS8784). Kegagalan inisialisasi sering terjadi ketika generator tidak dapat menemukan rakitan atau sumber daya yang diperlukan selama startup. Pastikan paket NuGet generator terinstal dengan benar dan semua dependensi transitif berhasil diurai.
  • Laporkan kegagalan ke pengelola generator sumber jika pengecualian berasal dari kode generator pihak ketiga (CS8784, CS8785). Sertakan detail pengecualian lengkap dari output build dalam laporan bug Anda.
  • Jika Anda membuat source generator, tambahkan penanganan pengecualian dalam metode Initialize atau Execute Anda untuk menangkap dan melaporkan kesalahan dengan baik (CS8784, CS8785).

Kompatibilitas penganalisis dan generator sumber

  • CS8032: Instans penganalisis 'analyzer' tidak dapat dibuat dari 'assembly' : 'reason'.
  • CS8033: Rakitan 'assembly' tidak berisi penganalisis apa pun.
  • CS8034: Tidak dapat memuat perakitan 'assembly' Analyzer: 'reason'
  • CS8040: Melewati beberapa tipe dalam rakitan penganalisis 'assembly' karena ReflectionTypeLoadException : 'exception'.
  • CS8700: Beberapa file konfigurasi penganalisis tidak dapat berada di direktori yang sama ('direktori').
  • CS8850: Assembly 'assembly' yang berisi tipe 'type' mereferensikan .NET Framework, yang tidak didukung.
  • CS9057: Rakitan penganalisis 'assembly' tidak dapat digunakan karena merujuk ke versi 'version' dari pengompilasi, yang lebih baru daripada versi 'currentVersion' yang sedang digunakan.
  • CS9067: Referensi penganalisis 'reference' ditentukan lebih dari satu kali

Peringatan dan kesalahan ini menunjukkan adanya masalah saat memuat, membuat instans, atau mengonfigurasi rakitan penganalisis dan generator sumber. Karena generator sumber dimuat sebagai rakitan penganalisis, diagnostik ini berlaku untuk penganalisis dan generator sumber.

Untuk memperbaiki masalah ini, ikuti panduan ini:

  • Tingkatkan SDK .NET atau versi kompilator Anda agar sesuai dengan persyaratan penganalisis, atau gunakan versi lama paket penganalisis yang kompatibel dengan pengkompilasi Anda saat ini (CS9057). Kesalahan ini terjadi ketika rakitan penganalisis menargetkan versi API Roslyn yang lebih baru daripada yang disediakan pengkompilasi yang berjalan.
  • Hapus referensi penganalisis duplikat dari proyek Anda (CS9067). Periksa file proyek Anda untuk elemen <Analyzer> atau <PackageReference> yang berulang dan menyertakan assembly penganalisis yang sama melalui jalur yang berbeda. Dependensi paket transitif juga dapat menyebabkan duplikat.
  • Verifikasi bahwa rakitan penganalisis adalah rakitan .NET yang valid dan tidak rusak (CS8034). Jika rakitan tidak dapat dimuat sama sekali, pastikan file ada di jalur yang direferensikan dan dibuat untuk kerangka kerja target yang kompatibel. Bangun ulang atau instal ulang paket NuGet untuk mendapatkan salinan baru.
  • Pastikan jenis penganalisis memiliki konstruktor tanpa parameter publik (CS8032). Pengkompilasi membuat instans penganalisis dengan memanggil konstruktor default mereka. Jika konstruktor melempar pengecualian atau memerlukan parameter, penganalisis tidak dapat dibuat.
  • Verifikasi bahwa assembly yang dirujuk benar-benar memuat tipe analyzer atau generator sumber (CS8033). Rakitan yang dirujuk sebagai penganalisis harus berisi jenis yang mengimplementasikan DiagnosticAnalyzer atau ISourceGenerator/IIncrementalGenerator. Jika assembly merupakan dependensi runtime, bukan analyzer, gunakan sebagai referensi proyek biasa atau referensi paket biasa.
  • Atasi masalah saat memuat tipe dalam assembly penganalisis dengan memastikan semua dependensinya tersedia (CS8040). ReflectionTypeLoadException umumnya berarti assembly tersebut mereferensi tipe dari assembly lain yang tidak dapat ditemukan. Pastikan semua dependensi yang diperlukan disertakan dalam paket NuGet penganalisis.
  • Pastikan file konfigurasi penganalisis (.editorconfig atau .globalconfig) unik per direktori (CS8700). Pengompilasi tidak mengizinkan beberapa file konfigurasi penganalisis dalam direktori yang sama karena aturan prioritasnya akan ambigu. Gabungkan file atau hapus duplikat.
  • Perbarui penganalisis atau generator sumber agar menargetkan .NET Standard atau .NET modern, alih-alih .NET Framework (CS8850). Assembly yang mereferensikan .NET Framework tidak didukung dalam toolchain pengompilasi .NET modern. Jika Anda memelihara penganalisis, targetkan ulang ke netstandard2.0. Jika ini adalah paket pihak ketiga, tingkatkan ke versi yang mendukung .NET modern.

Pencegat bersifat eksperimental

  • CS9137: Fitur 'pencegat' tidak diaktifkan di namespace layanan ini. Tambahkan <Features>InterceptorsPreview</Features> ke proyek Anda.

Untuk menggunakan interseptor, tambahkan elemen <Features>InterceptorsPreview</Features> ke file proyek Anda di dalam bagian <PropertyGroup> (CS9137). Pencegat adalah fitur eksperimental dan tidak diaktifkan secara default. Persetujuan eksplisit ini diperlukan karena fitur interceptor dapat mengalami perubahan yang tidak kompatibel atau dihapus pada rilis mendatang. Pengkompilasi memerlukan konfirmasi bahwa Anda memahami risiko sebelum mengizinkan penggunaannya. Untuk informasi selengkapnya tentang pencegat dan kemampuannya, lihat Pencegat dalam dokumentasi fitur C# 12.

Ketidakcocokan tanda tangan

Kesalahan dan peringatan berikut menunjukkan ketidakcocokan antara metode pencegat dan metode yang dapat disadap.

  • CS9144: Tidak dapat mencegat metode M dengan pencegat V karena tanda tangan tidak cocok.
  • CS9148: Interceptor harus memiliki parameter yang this cocok.
  • CS9149: Interceptor tidak boleh memiliki this parameter karena metode tidak memiliki this parameter.
  • CS9155: Tidak dapat mencegat panggilan dengan M karena tidak dapat diakses dalam V.
  • CS9156: Tidak dapat mencegat panggilan ke M dengan V karena perbedaan 'scoped' pengubah atau atribut [UnscopedRef].
  • CS9177: Metode 'method' harus bukan generik atau memiliki aritas 'arity' agar cocok dengan 'target'.
  • CS9178: Metode 'metode' harus non-generik agar sesuai dengan 'target'.

Selain itu, peringatan berikut menunjukkan ketidakcocokan dalam tanda tangan pencegat dan metode yang dapat dicegat:

  • CS9154: Mencegat panggilan terhadap M dengan interseptor V, tetapi tanda tangan tidak cocok.
  • CS9158: Nullability tipe referensi dalam tipe pengembalian tidak cocok dengan metode yang dapat dicegat.
  • CS9159: Keadaan null dari tipe referensi dalam tipe parameter tidak cocok dengan metode yang dapat diintersepsi.
  • CS9270: 'InterceptsLocationAttribute(string, int, int)' tidak didukung. Pindah ke pembuatan berbasis 'InterceptableLocation' dari atribut ini sebagai gantinya. (https://github.com/dotnet/roslyn/issues/72133)

Untuk memperbaiki masalah ini, pastikan metode pencegat Anda cocok dengan persyaratan tanda tangan dan akses metode yang dapat dicegat:

  • Pastikan tanda tangan metode pencegat sama persis dengan metode yang dapat dicegat (CS9144, CS9154). Jenis parameter, pengubah, urutan, dan jenis pengembalian harus identik. Tinjau kedua deklarasi metode dan ratakan tanda tangannya.
  • this Tambahkan parameter ke pencegat Anda saat metode yang dapat dicegat adalah metode instans (CS9148), atau hapus this parameter ketika metode yang dapat dicegat statis (CS9149). Pencegat instans memerlukan parameter this dari tipe deklarasi, sementara pencegat statis tidak boleh memilikinya.
  • Deklarasikan pencegat Anda di lokasi di mana metode yang dapat dicegat dapat diakses (CS9155). Jika metode yang dapat dicegat adalah internal, pencegat harus berada di rakitan yang sama. Jika itu private, pencegat harus dalam jenis yang sama atau jenis berlapis.
  • Sesuaikan modifikator scoped dan atribut [UnscopedRef] pada parameter yang sesuai ref (CS9156). Setiap parameter ref dalam pencegat harus memiliki anotasi masa pakai yang sama dengan parameter yang sesuai dalam metode yang dapat dicegat agar memori aman terjaga.
  • Pastikan kedua metode memiliki kesesuaian aritas generik (CS9177, CS9178). Jika metode yang dapat dicegat bersifat non-generik, pencegat juga harus non-generik. Jika metode yang dapat dicegat memiliki parameter jenis, pencegat harus memiliki jumlah parameter jenis yang sama dengan batasan yang kompatibel.
  • Samakan anotasi nullability pada tipe pengembalian (CS9158) dan tipe parameter (CS9159). Aktifkan jenis referensi nullable dalam proyek Anda dan pastikan anotasi nullability interceptor cocok dengan metode yang dapat dicegat persis untuk menjaga keamanan jenis.
  • Gunakan generasi yang diperbarui berbasis InterceptableLocation untuk InterceptsLocationAttribute alih-alih konstruktor yang sudah usang (string, int, int) (CS9270). Format yang lebih baru menyediakan dukungan alat yang lebih baik dan validasi waktu kompilasi. Lihat masalah GitHub untuk panduan migrasi.

Pemetaan yang salah

Pencegat memerlukan pemetaan sumber yang menghubungkan metode yang dapat dicegat dan metode pencegat. Kesalahan berikut menunjukkan masalah dengan pemetaan:

  • CS9139: Tidak dapat mencegat: kompilasi tidak berisi file dengan jalur.
  • CS9140: Tidak dapat menyisipkan: kompilasi tidak berisi file dengan jalur 'path'. Apakah Anda bermaksud menggunakan jalur 'candidatePath'?
  • CS9141: Baris dan nomor karakter yang disediakan tidak merujuk ke nama metode yang dapat dicegat, melainkan ke token 'token'.
  • CS9142: File yang diberikan memiliki n baris, yang kurang dari nomor mbaris yang disediakan .
  • CS9143: Baris yang diberikan panjangnya adalah c karakter, yang kurang dari nomor nkarakter yang disediakan .
  • CS9145: Tidak dapat mencegat: Jalur tidak dipetakan. Diharapkan jalur yang dipetakan.
  • CS9147: Baris dan nomor karakter yang disediakan tidak mengacu pada awal token 'token'. Apakah Anda bermaksud menggunakan baris 'n' dan karakter 'c'?
  • CS9150: Interceptor tidak dapat memiliki null jalur file.
  • CS9157: Nomor garis dan karakter yang disediakan untuk InterceptsLocationAttribute harus positif.

Untuk memperbaiki kesalahan pemetaan, pastikan Anda InterceptsLocationAttribute berisi jalur file yang valid dan informasi posisi yang akurat:

  • Verifikasi jalur file cocok dengan file dalam kompilasi Anda dengan tepat (CS9139, CS9140). Gunakan jalur yang tepat seperti yang muncul di proyek Anda, termasuk casing dan pemisah direktori yang benar. Jika pengkompilasi menyarankan jalur alternatif, perbarui atribut Anda untuk menggunakan jalur tersebut.
  • Gunakan jalur file yang dipetakan saat bekerja dengan generator sumber yang mengubah jalur file (CS9145). Generator sumber sering memetakan ulang jalur untuk file yang dihasilkan, dan Anda harus menggunakan jalur yang dipetakan yang dikenal kompilator, bukan jalur sumber asli.
  • Pastikan jalur file bukan null pada InterceptsLocationAttribute (CS9150). Setiap penyadapan harus menentukan jalur file non-null yang valid yang mengidentifikasi file sumber yang berisi panggilan untuk disadap.
  • Berikan nomor baris dan karakter yang dimulai dari 1 dan bernilai positif (CS9157). Nomor baris dan posisi karakter harus dimulai pada 1, bukan 0. Verifikasi generator sumber Anda menggunakan pengindeksan berbasis 1 saat menghitung posisi.
  • Arahkan ke awal token nama metode yang tepat (CS9141, CS9147). Nomor baris dan karakter harus mengidentifikasi karakter pertama dari nama metode dalam pemanggilan, bukan spasi kosong, operator, atau token lainnya. Jika pengkompilasi menyarankan koordinat alternatif, gunakan untuk menargetkan awal token yang benar.
  • Tetap berada dalam batas file (CS9142, CS9143). Pastikan nomor baris tidak melebihi jumlah baris total dan jumlah karakter tidak melebihi panjang baris. Hitung ulang posisi jika file sumber telah berubah sejak atribut dibuat.

Deklarasi pencegat yang salah

Kesalahan berikut menunjukkan adanya masalah pada deklarasi pencegat, termasuk masalah dengan format InterceptsLocationAttribute atau pelanggaran terhadap aturan pencegat:

  • CS9138: Metode 'method' tidak dapat digunakan sebagai interseptor karena tipe induknya memiliki parameter tipe.
  • CS9146: Metode pencegat harus merupakan metode anggota biasa.
  • CS9151: M
  • CS9152: Tidak dapat mengintersepsi pemanggilan pada file dengan jalur 'path' karena beberapa file dalam kompilasi memiliki jalur ini.
  • CS9153: Panggilan yang ditunjukkan dicegat beberapa kali.
  • CS9160: Operator nameof tidak bisa diintersepsi.
  • CS9161: Pencegat tidak dapat ditandai dengan UnmanagedCallersOnlyAttribute.
  • CS9206: Pencegat tidak dapat dideklarasikan dalam namespace global.
  • CS9207: Tidak dapat mengintersepsi 'method' karena itu bukan pemanggilan sebuah metode anggota biasa.
  • CS9231: Argumen data ke InterceptsLocationAttribute tidak dalam format yang benar.
  • CS9232: Versi 'versi' dari format interceptor tidak didukung. Versi terbaru yang didukung adalah '1'.
  • CS9233: Tidak dapat mencegat panggilan dalam file 'file' karena diduplikasi di tempat lain dalam kompilasi.
  • CS9234: Tidak dapat mencegat panggilan dalam file 'file' karena file yang cocok tidak ditemukan dalam kompilasi.
  • CS9235: Argumen data ke InterceptsLocationAttribute mengacu pada posisi yang tidak valid dalam file 'file'.

Untuk memperbaiki kesalahan deklarasi interceptor, ikuti aturan ini untuk deklarasi interceptor yang valid dan penggunaan InterceptsLocationAttribute yang sesuai:

  • InterceptsLocationAttribute Format argumen data dengan benar (CS9231). Atribut memerlukan data terstruktur khusus yang mengodekan jalur file dan informasi posisi. Pastikan generator sumber Anda menghasilkan data dalam format yang diharapkan yang cocok dengan spesifikasi pencegat saat ini.
  • Gunakan versi '1' di Anda InterceptsLocationAttribute (CS9232), karena ini adalah versi terbaru yang didukung. Perbarui generator sumber Anda ke atribut format versi output 1 daripada nomor versi yang tidak didukung.
  • Pastikan jalur file unik dalam kompilasi Anda (CS9233, CS9234). Ketika kompilasi berisi jalur file duplikat, ganti nama atau reorganisasi file untuk membuat setiap jalur unik. Verifikasi bahwa jalur file dalam atribut cocok dengan file yang benar-benar disertakan dalam kompilasi.
  • Validasi titik data posisi ke lokasi kode yang valid (CS9235). Nomor baris dan karakter harus mereferensikan titik penyadapan yang valid dalam file yang ditentukan. Regenerasi atribut jika file sumber berubah atau jika posisi berada di luar batas file.
  • Deklarasikan metode pencegat non-generik di dalam tipe non-generik (CS9138). Interseptor tidak dapat dideklarasikan dalam tipe yang memiliki parameter tipe. Jika Anda perlu mencegat metode generik, buat pencegat non-generik dalam tipe penampung non-generik yang berfungsi dengan tipe konkret tertentu.
  • Jadikan metode interceptor sebagai anggota biasa (CS9146). Pencegat tidak boleh menjadi operator, konstruktor, finalizer, properti, atau pengindeks. Nyatakan interseptor Anda sebagai metode statis atau metode instans reguler.
  • Mencegat pemanggilan metode aktual, bukan ekspresi (CS9151, CS9207). Anda hanya dapat mencegat panggilan ke metode anggota standar yang sedang dijalankan. Anda tidak dapat mencegat grup metode, delegasi, atau metode yang diberi referensi tanpa dipanggil. Pastikan lokasi yang dapat dicegat mengidentifikasi panggilan metode aktual.
  • Hapus upaya intersepsi duplikat (CS9153). Setiap panggilan metode hanya dapat diintersepsi sekali. Jika beberapa InterceptsLocationAttribute instans menargetkan panggilan yang sama, hapus semua kecuali satu untuk mengatasi ambiguitas.
  • Jangan mencegat nameof operator (CS9160). Operator nameof tidak memanggil metode pada runtime, sehingga tidak dapat dicegat. Hanya mencegat panggilan metode aktual yang dijalankan saat runtime.
  • Hapus UnmanagedCallersOnlyAttribute dari pencegat (CS9161). Pencegat harus bisa dipanggil dari kode terkelola dan tidak boleh ditandai dengan UnmanagedCallersOnlyAttribute. Hapus atribut dari deklarasi metode pencegat Anda.
  • Deklarasikan pencegat dalam namespace (CS9206). Pencegat tidak dapat dideklarasikan dalam namespace global dan harus dimuat dalam setidaknya satu deklarasi namespace. Bungkus kelas pencegat Anda di namespace.
  • Atasi jalur file duplikat di tingkat kompilasi (CS9152). Ketika beberapa file berbagi jalur yang sama dalam kompilasi, pengkompilasi tidak dapat menentukan file mana yang akan disadap. Pastikan konfigurasi build menghasilkan jalur file unik atau gunakan strategi organisasi yang berbeda untuk file sumber Anda.