Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini membahas kesalahan dan peringatan pengkompilasi berikut:
- CS0017: Program 'nama file output' memiliki lebih dari satu titik masuk yang ditentukan. Kompilasi dengan /main untuk menentukan jenis yang berisi titik masuk.
- CS0028: 'deklarasi fungsi' memiliki tanda tangan yang salah untuk menjadi titik masuk
- CS0402: 'identifier': titik masuk tidak boleh generik atau dalam tipe generik
- CS1555: Tidak dapat menemukan 'kelas' yang ditentukan untuk metode Utama
- CS1556: 'konstruksi' yang ditentukan untuk Metode utama harus merupakan kelas atau struktur yang valid
- CS1557: Tidak dapat menggunakan 'kelas' untuk metode Utama karena berada dalam file output yang berbeda
- CS1558: 'class' tidak memiliki metode Utama statis yang sesuai
- CS1559: Tidak dapat menggunakan 'objek' untuk metode Utama karena diimpor
- CS2017: Tidak dapat menentukan /main jika membuat modul atau pustaka
- CS5001: Program tidak berisi metode 'Main' statis yang cocok untuk titik masuk
- CS7022: Titik masuk program adalah kode global; mengabaikan titik masuk '{0}'.
- CS8801: Tidak dapat menggunakan variabel lokal atau fungsi lokal '{0}' yang dideklarasikan dalam pernyataan tingkat atas dalam konteks ini.
- CS8802: Hanya satu unit kompilasi yang dapat memiliki pernyataan tingkat atas.
- CS8803: Pernyataan tingkat atas harus mendahului namespace dan deklarasi jenis.
- CS8805: Program yang menggunakan pernyataan tingkat atas harus dapat dieksekusi.
- CS8899: Titik masuk aplikasi tidak dapat dikaitkan dengan 'UnmanagedCallersOnly'.
- CS8937: Setidaknya satu pernyataan tingkat atas harus tidak kosong.
Main deklarasi metode
- CS0017: Program 'nama file output' memiliki lebih dari satu titik masuk yang ditentukan. Kompilasi dengan /main untuk menentukan jenis yang berisi titik masuk.
- CS0028: 'deklarasi fungsi' memiliki tanda tangan yang salah untuk menjadi titik masuk
- CS0402: 'pengidentifikasi': titik entri tidak dapat bersifat generik atau berada dalam tipe generik
- CS1558: 'class' tidak memiliki metode Utama statis yang sesuai
- CS5001: Program tidak berisi metode 'Main' statis yang cocok untuk titik masuk
- CS8899: Titik masuk aplikasi tidak dapat dikaitkan dengan 'UnmanagedCallersOnly'.
Program yang dikompilasi ke executable harus berisi metode yang valid Main sebagai titik masuknya. Untuk informasi selengkapnya, lihat Argumen main() dan baris perintah.
Untuk memperbaiki kesalahan ini, pastikan deklarasi metode Anda Main mengikuti aturan berikut:
- Nyatakan metode
Mainsebagaistaticdengan jenis pengembalianvoid,int,Task, atauTask<int>, karena runtime memerlukan signatur tertentu untuk mengidentifikasi titik masuk program (CS0028, CS1558). Metode ini dapat secara opsional menerimastring[]parameter untuk argumen baris perintah. Jika Anda menggunakan pengubahasync, jenis pengembalian harusTaskatauTask<int>, dan Anda harus menargetkan bahasa C# versi 7.1 atau yang lebih tinggi. - Pindahkan
Mainmetode dari tipe generik mana pun, karena runtime tidak dapat menyelesaikan titik masuk yang unik ketika tipe yang menaunginya memerlukan argumen tipe (CS0402). -
UnmanagedCallersOnlyAttribute Hapus atribut dari
Mainmetode , karena titik masuk harus dapat dipanggil dari kode terkelola danUnmanagedCallersOnlymembatasi metode hanya untuk penelepon yang tidak dikelola (CS8899). - Saat kode Anda berisi beberapa
Mainmetode di berbagai jenis, gunakan opsi kompilator StartupObject untuk menentukan jenis mana yang berisi titik masuk yang dimaksudkan (CS0017). Tanpa opsi itu, pengkompilasi tidak dapat menentukan metode mana yangMainakan digunakan. - Verifikasi bahwa proyek executable harus mendefinisikan metode
Maindengan tanda tangan yang tepat, karena proyek dengan OutputTypeexe atau winexe memerlukan titik masuk (CS5001, CS1558). Nama metode bersifat sensitif terhadap huruf besar/kecil -maintidak memenuhi syarat. Jika Anda tidak memerlukan executable, ubah jenis output ke pustaka.
Nota
CS0028 adalah diagnostik warisan yang tidak dihasilkan pengkompilasi C# saat ini. Versi modern dari kompilator melaporkan CS1558 atau CS5001 sebagai gantinya Main jika metode memiliki tanda tangan yang tidak valid.
Nota
CS0017, CS0028, CS0402, CS1558, dan CS5001 hanya dilaporkan selama operasi Build atau Pembangunan ulang . Mereka tidak muncul sebagai diagnostik IntelliSense saat Anda mengetik di IDE.
StartupObject opsi pengkompilasi
- CS1555: Tidak dapat menemukan 'kelas' yang ditentukan untuk metode Utama
- CS1556: 'konstruksi' yang ditentukan untuk Metode utama harus merupakan kelas atau struktur yang valid
- CS1557: Tidak dapat menggunakan 'kelas' untuk metode Utama karena berada dalam file output yang berbeda
- CS1559: Tidak dapat menggunakan 'objek' untuk metode Utama karena diimpor
- CS2017: Tidak dapat menentukan /main jika membuat modul atau pustaka
Opsi pengkompilasi StartupObject (juga dikenal sebagai /main) menentukan tipe mana yang berisi metode Main milik program ketika beberapa tipe mendefinisikan satu. Untuk informasi selengkapnya, lihat Argumen StartupObject dan Main() dan baris perintah.
Untuk memperbaiki kesalahan ini, pastikan opsi StartupObject merujuk ke jenis yang valid.
- Verifikasi bahwa nama kelas yang sepenuhnya memenuhi syarat yang Anda berikan cocok dengan
StartupObjectjenis yang ditentukan dalam kode sumber kompilasi saat ini. Pengkompilasi hanya mencari file sumber yang dikompilasi - bukan rakitan yang dirujuk - untuk jenis yang ditentukan (CS1555). Periksa kesalahan ketik dalam nama lengkap, termasuk namespace. - Pastikan pengidentifikasi yang Anda berikan untuk
StartupObjectmerujuk padaclassataustructyang bukan bersifat generik. Pengompilasi memerlukan tipe konkret yang dapat berisi metodeMainyang valid (CS1556). Antarmuka, enum, delegasi, dan jenis generik bukan target yang valid. - Pindahkan kelas yang ditentukan ke dalam file output yang sama dengan kompilasi saat ini. Opsi
/mainmenentukan titik masuk dalam satu rakitan output dan tidak dapat mereferensikan tipe yang dikompilasi ke dalam output yang berbeda (CS1557). - Pastikan jenis yang ditentukan ada dalam kode sumber proyek saat ini, bukan dalam assembly yang direferensikan. Pengkompilasi tidak dapat menunjuk jenis yang diimpor sebagai titik masuk (CS1559).
-
/mainHapus opsi saat membuat pustaka atau modul. Hanya proyek yang dapat dieksekusi (dengan OutputTypeexe atau winexe) yang memiliki titik masuk (CS2017). Jika Anda memerlukan titik masuk, ubah jenis output menjadi dapat dieksekusi. - Pastikan jenis yang ditentukan dengan
StartupObjectmendeklarasikan metode yang validMain. Jika jenis ada tetapi tidak berisi metode statisMainyang sesuai, pengkompilasi menghasilkan CS1558. Lihat bagianMaindeklarasi metode untuk tanda tangan yang diperlukan.
Nota
CS1557 dan CS1559 adalah diagnostik warisan yang tidak dihasilkan kompilator C# saat ini. Skenario yang memicu kesalahan ini tidak lagi didukung atau jarang terjadi untuk menjamin deteksi.
Nota
CS1555 dan CS1556 hanya dilaporkan selama operasi Build atau Pembangunan ulang . Mereka tidak muncul sebagai diagnostik IntelliSense saat Anda mengetik di IDE.
Pernyataan tingkat tinggi
- CS7022: Titik masuk program adalah kode global; mengabaikan titik masuk '{0}'.
- CS8801: Tidak dapat menggunakan variabel lokal atau fungsi lokal '{0}' yang dideklarasikan dalam pernyataan tingkat atas dalam konteks ini.
- CS8802: Hanya satu unit kompilasi yang dapat memiliki pernyataan tingkat atas.
- CS8803: Pernyataan tingkat atas harus mendahului namespace dan deklarasi jenis.
- CS8805: Program yang menggunakan pernyataan tingkat atas harus dapat dieksekusi.
- CS8937: Setidaknya satu pernyataan tingkat atas harus tidak kosong.
Pernyataan tingkat atas menggantikan metode eksplisit Main sebagai titik masuk program. Untuk informasi selengkapnya, lihat Pernyataan tingkat atas dalam panduan pemrograman C# dan spesifikasi fitur pernyataan tingkat atas .
Untuk memperbaiki kesalahan ini, pastikan penggunaan pernyataan tingkat atas Anda mengikuti aturan berikut:
- Konsolidasikan semua pernyataan tingkat atas ke dalam satu file, karena hanya satu unit kompilasi (file) yang dapat berisi pernyataan tingkat atas (CS8802). Pindahkan kode tingkat atas dari file lain ke dalam satu file tersebut. Restrukturisasi file yang tersisa sehingga hanya berisi namespace dan deklarasi tipe.
- Tempatkan semua pernyataan tingkat atas sebelum salah satu
namespaceatautypedeklarasi dalam file, karena pengkompilasi memerlukan pernyataan tingkat atas untuk muncul terlebih dahulu (CS8803). Jika Anda memilikiusingarahan, arahan tersebut masih dapat mendahului pernyataan tingkat atas. - Sertakan setidaknya satu pernyataan yang berisi kode yang dapat dieksekusi, karena file dengan hanya pernyataan kosong, spasi kosong, atau komentar tidak memenuhi syarat sebagai titik masuk yang valid (CS8937). Tambahkan pernyataan seperti panggilan metode, penetapan variabel, atau ekspresi untuk memenuhi persyaratan.
- Akses variabel lokal dan fungsi lokal yang dideklarasikan dalam pernyataan tingkat atas hanya dari dalam konteks pernyataan tingkat atas itu sendiri, karena deklarasi tersebut dicakup ke metode titik masuk yang dihasilkan dan tidak terlihat oleh file lain atau untuk mengetik anggota yang dideklarasikan dalam file yang sama (CS8801). Jika Anda perlu berbagi status di seluruh file, deklarasikan variabel sebagai bidang statis atau properti pada jenis sebagai gantinya.
- Atur OutputType proyek ke exe, karena pernyataan tingkat atas menentukan titik masuk dan titik masuk hanya valid dalam proyek yang dapat dieksekusi (CS8805). Jika Anda membangun pustaka, hapus pernyataan tingkat atas dan gunakan jenis dan metode sebagai gantinya.
- Hapus atau ganti nama metode eksplisit
Mainapa pun ketika pernyataan tingkat atas ada, karena pengkompilasi memperlakukan pernyataan tingkat atas sebagai titik masuk dan mengabaikan metode apa punMain, menghasilkan peringatan (CS7022). Jika Anda ingin menggunakan metode eksplisitMain, pindahkan kode pernyataan tingkat atas ke metode tersebut dan hapus pernyataan tingkat atas.