Dalam Visual Studio, saya dapat memilih opsi "Perlakukan peringatan sebagai kesalahan" untuk mencegah kode saya dari kompilasi jika ada peringatan. Tim kami menggunakan opsi ini, tetapi ada dua peringatan yang ingin kami simpan sebagai peringatan.
Ada opsi untuk menyembunyikan peringatan, tetapi kami SANGAT ingin mereka muncul sebagai peringatan, jadi itu tidak akan berhasil.
Tampaknya satu-satunya cara untuk mendapatkan perilaku yang kita inginkan adalah dengan memasukkan daftar setiap nomor peringatan C # ke dalam kotak teks "Peringatan spesifik", kecuali dua yang kita ingin diperlakukan sebagai peringatan.
Selain sakit kepala pemeliharaan, kerugian terbesar dari pendekatan ini adalah bahwa beberapa peringatan tidak memiliki angka, sehingga tidak dapat dirujuk secara eksplisit. Misalnya, "Tidak dapat menyelesaikan referensi ini. Tidak dapat menemukan perakitan 'Data ....'"
Adakah yang tahu cara yang lebih baik untuk melakukan ini?
Memperjelas bagi mereka yang tidak langsung melihat mengapa ini berguna. Pikirkan tentang cara kerja sebagian besar peringatan. Mereka memberi tahu Anda ada sesuatu yang salah dalam kode yang baru saja Anda tulis. Butuh sekitar 10 detik untuk memperbaikinya, dan itu membuat basis kode lebih bersih.
Peringatan "Usang" sangat berbeda dari ini. Terkadang memperbaikinya berarti hanya menggunakan tanda tangan metode baru. Tetapi jika seluruh kelas kedaluwarsa, dan Anda menggunakannya tersebar melalui ratusan ribu baris kode, perlu waktu berminggu-minggu atau lebih untuk memperbaikinya. Anda tidak ingin build tersebut rusak selama itu, tetapi Anda pasti ingin melihat peringatan tentang hal itu. Ini bukan hanya kasus hipotetis - ini telah terjadi pada kami.
Peringatan literal "#warning" juga unik. Saya sering ingin check-in, tetapi saya tidak ingin merusak build.
Jawaban:
Anda dapat menambahkan
WarningsNotAsErrors
-tag di file proyek.Catatan:
612
dan618
keduanya merupakan peringatan tentang Usang, tidak tahu perbedaannya tetapi proyek yang saya kerjakan melaporkan Usang dengan peringatan 618.sumber
[Obsolete]
anggota yangmessage
beradanull
sebagai kesalahan, sementara kita membiarkan anggotamessage
yang disetel tetap menjadi peringatan saja. Jikaerror
parameter disetel ketrue
dalamObsoleteAttribute
, CS0619 akan dibuat. Ini sepertinya tidak berhasil jikamessage
adanull
(tapi siapa yang akan melakukannya[Obsolete(null, true)]
?).--warnaserror-:618,1030
pada Build-> Other flags field. Opsi proyek ini belum diterapkan untuk proyek F #. github.com/Microsoft/visualfsharp/issues/3395<NoWarn>
, yang lebih rendah dalam banyak kasus dan gagal dimasukkan ke<WarningsNotAsErrors>
dalam UI. Pujian./ warnaserror / warnaserror-: 618
sumber
MSBUILD : error MSB1001: Unknown switch. Switch: /warnaserror-:618
atau lebih khusus lagi, dalam kasus Anda:
/ warnaserror / warnaserror-: 612,1030,1701,1702
ini harus memperlakukan semua peringatan sebagai kesalahan kecuali yang ada dalam daftar yang dipisahkan koma
sumber
Mengapa Anda ingin terus melihat peringatan yang tidak Anda perlakukan sebagai kesalahan? Saya bingung mengapa ini diinginkan - Anda memperbaikinya atau tidak.
Apakah dua file build / solusi yang berbeda berfungsi - atau skrip untuk menyalin satu dan kemudian memodifikasi tingkat peringatan / peringatan agar sesuai. Tampaknya mungkin Anda ingin beberapa eksekusi kompilator bertele-tele, tetapi yang lain Anda ingin terus berjalan.
Jadi switch kompilator yang berbeda sepertinya cara yang baik untuk digunakan. Anda dapat melakukan ini dengan target yang berbeda - satu berlabel debug atau rilis dan yang lain diberi label yang sesuai tentang peringatan.
sumber
Saya menggunakan peringatan perlakukan sebagai kesalahan.
Dalam kasus yang jarang terjadi, ketika beberapa peringatan yang dapat diterima muncul (yaitu merujuk anggota usang, atau dokumentasi yang hilang pada kelas serialisasi XML), maka itu harus secara eksplisit disembunyikan dengan #pragma disable (dan alasan opsional untuk tidak memiliki kode bersih dapat diberikan sebagai komentar).
Kehadiran direktif ini juga memungkinkan untuk mengetahui, siapa yang menerima pelanggaran peringatan ini (dengan tindakan "menyalahkan" kontrol versi) jika ada beberapa pertanyaan.
sumber
Mengapa tidak memiliki aturan yang mengatakan "Siapa pun yang memeriksa kode dengan peringatan apa pun di dalamnya selain 612, 1030, 1701 atau 1702 di dalamnya harus pergi ke papan tulis dan menulis ratusan kali 'Saya tidak akan memeriksa kode dengan peringatan yang tidak diizinkan lagi. '"
sumber
peringatan pragma (Referensi C #)
peringatan pragma dapat digunakan untuk mengaktifkan atau menonaktifkan peringatan tertentu.
http://msdn.microsoft.com/en-us/library/441722ys(VS.80).aspx
sumber
Menurut saya akar masalah sebenarnya adalah kombinasi dari Anda memperlakukan peringatan sebagai kesalahan, padahal jelas tidak, dan kebijakan Anda yang jelas tentang mengizinkan check-in yang melanggar ini. Seperti yang Anda katakan, Anda ingin tetap dapat bekerja meskipun ada peringatan. Anda hanya menyebutkan beberapa peringatan yang ingin Anda abaikan, tetapi bagaimana jika orang lain dalam tim menyebabkan jenis peringatan lain, yang akan membutuhkan waktu lama untuk memperbaikinya? Tidakkah Anda ingin bisa mengabaikannya juga?
Solusi logisnya adalah dengan 1) Larang check in jika kode tidak dapat dikompilasi (yang berarti mereka yang membuat peringatan harus memperbaikinya, karena pada dasarnya, mereka merusak build), atau 2) memperlakukan peringatan sebagai peringatan. Buat dua konfigurasi build, satu yang memperlakukan peringatan sebagai kesalahan, yang dapat dijalankan secara teratur untuk memastikan bahwa kode bebas peringatan, dan yang lainnya, yang hanya memperlakukannya sebagai peringatan, dan memungkinkan Anda untuk bekerja bahkan jika orang lain memperkenalkan peringatan.
sumber