Saya menulis halaman pisau cukur pertama saya hari ini, tidak tahu bagaimana cara masuk #if debug #else #endif
Bagaimana saya bisa memasukkan preprocessor di pisau cukur?
Saya menulis halaman pisau cukur pertama saya hari ini, tidak tahu bagaimana cara masuk #if debug #else #endif
Bagaimana saya bisa memasukkan preprocessor di pisau cukur?
#if debug
dengan pisau cukur tetapi itu akan selalu benar. Jadi jawaban untuk pertanyaan Anda adalah bahwa tidak ada gunanya melakukannya karena Razor akan selalu dikompilasi dalam mode debug.Jawaban:
Saya baru saja membuat metode ekstensi:
Kemudian menggunakannya dalam pandangan saya seperti:
Karena helper dikompilasi dengan simbol DEBUG / RELEASE, helper bekerja.
sumber
public static bool IsDebug(...){ return true; }
, dan sebaliknya untuk mode non DEBUG.Ini dibangun untuk
HttpContext
:IMO, ini lebih masuk akal daripada kompilasi bersyarat untuk tampilan dan berguna untuk beberapa skenario pengujian. (Lihat komentar Tony Wall di bawah ini.)
Catatan:
NullReferenceException
untukHttpContext.Current
Alex Angas menyebutkan bahwa mereka mendapatkan
NullReferenceException
solusi ini, dan beberapa orang telah menunjukkan bahwa ini mungkin bukan acara yang terisolasi.Tebakan terbaik saya:
HttpContext.Current
disimpanCallContext
, artinya hanya dapat diakses oleh utas yang menangani permintaan HTTP yang masuk. Jika pandangan Anda diberikan pada utas yang berbeda (mungkin beberapa solusi untuk tampilan yang dikompilasi?) Anda akan mendapatkannull
nilaiHttpContext.Current
.Jika Anda mendapatkan kesalahan ini, beri tahu saya di komentar dan sebutkan jika Anda menggunakan tampilan yang dikompilasi atau pengaturan khusus apa pun yang dapat mengakibatkan tampilan Anda sebagian / dibuat pada utas lainnya!
sumber
System.Web
versi 4.0.0.0), dan bahkan dengandebug
atribut (atau, seluruhcompilation
elemen) dihapus, saya tidak mendapatkan pengecualian. Berikutnya saya hipotesis terbaik adalah bahwa ini adalah bug yang diperbaiki di versiSystem.Web
perakitan yang lebih baru atau ada sesuatu yang berbeda tentang situasi spesifik Anda yang tidak saya sadari. Bisakah Anda membuat proyek uji minimal dan mengunggahnya di suatu tempat?C # dan ASP.NET MVC: Menggunakan arahan #jika dalam suatu tampilan
Sebenarnya jawaban itu memiliki jawaban yang benar. Anda harus lulus apakah Anda dalam mode debug melalui Model. (atau ViewBag) karena semua tampilan dikompilasi dalam mode debug.
sumber
// your debug stuff
Saya tahu ini bukan jawaban langsung untuk pertanyaan itu, tetapi karena saya cukup yakin konfigurasi debug adalah wajar dengan kenyataan bahwa Anda benar-benar mengeksekusi secara lokal, Anda selalu dapat menggunakan
Request.IsLocal
properti sebagai tes seperti debug. Jadi :sumber
Solusi saya sangat bodoh, tetapi berhasil. Tentukan konstanta global di suatu tempat di file statis:
Kemudian gunakan dengan Razor di HTML:
sumber
Secara default, tampilan MVC tidak dikompilasi sehingga #Jika DEBUG tidak dapat berfungsi dalam tampilan. Jika Anda ingin mengkompilasi tampilan untuk mengakses IF DEBUG config, Anda perlu:
ubah atribut berikut dari false ke true
muat ulang proyek Anda dan kemudian pandangan akan dikompilasi.
Satu-satunya pekerjaan lain di sekitar akan memiliki fungsi dalam kode Anda di belakang
lalu panggil dari tampilan:
sumber
Bagi saya, kode di bawah ini telah bekerja dengan sangat baik.
Ketika aplikasi sedang Men - debug tombol saya muncul, ketika Rilis , mereka tidak.
sumber
Ini berfungsi untuk saya dalam proyek label putih .net core 3.0
sumber
Di .NET Core, Anda dapat melakukan hal berikut alih-alih memeriksa variabel preprosesor:
sumber