Membaca brouhaha seputar Reflector yang dibayar membuat saya berpikir tentang produk dan penggunaannya. Banyak orang tampaknya menganggapnya sebagai alat penting.
Harus saya akui, saya sudah bertahun-tahun tidak menggunakan Reflektor. Maksud saya, ada dokumentasi untuk .Net API dan komponen pihak ketiga yang saya gunakan. Di masa lalu, setiap kali seorang rekan kerja mengeluarkan Reflector dari sabuk alatnya, saya merasa dia menuju ke rumput liar.
Membaca semua gairah di sekitar Reflector membuat saya bertanya apakah saya benar-benar kehilangan sesuatu di sini. Mengapa Anda sering membutuhkan sesuatu seperti Reflektor sehingga Anda menganggapnya sebagai alat yang penting? Saya dapat melihatnya dibutuhkan pada kesempatan yang sangat jarang, tetapi tidak cukup untuk dianggap sebagai alat penting. Tolong beri tahu saya.
Jawaban:
Berikut adalah contoh sempurna dari jenis pertanyaan. NET Reflector dapat menjawab untuk Anda.
Atau Anda dapat mempostingnya di SO dan membiarkan orang lain yang memasang Reflector menjawabnya untuk Anda. ;)
sumber
Saya menggunakan reflektor secara teratur (mungkin rata-rata satu atau dua kali seminggu) untuk membantu dengan dua masalah yang berbeda.
API / Perpustakaan yang didokumentasikan dengan buruk: Contoh favorit saya untuk ini adalah SharePoint. Kebanyakan setiap pengembang yang saya tahu melakukan pengembangan SharePoint menggunakannya untuk melengkapi dokumentasi yang tersedia. Bisakah kita bertahan tanpanya, sebagian besar ya; tetapi ada sejumlah kasus seandainya itu agak sulit.
Melakukan debug kesalahan yang tidak jelas: Hal ini juga dapat berguna dalam mencari tahu mengapa ada sesuatu yang melempar pengecualian. Jika Anda dapat melihat di mana pengecualian terjadi, Anda dapat melacak kembali rantai panggilan untuk mencari tahu apa masalahnya (salah menggunakan pustaka, bug, dll.).
sumber
Reflektor sangat penting ketika Anda memiliki beberapa rakitan pihak ketiga yang harus Anda gunakan dan itu didokumentasikan dengan buruk atau memiliki bug di dalamnya dan Anda ingin tahu apa yang terjadi dengan kodenya.
Tentu, yang harus Anda lakukan adalah mengaburkan kode Anda dan Reflector tidak berguna (atau itu terakhir kali saya periksa) tetapi itu menyelamatkan saya banyak waktu dan frustrasi di masa lalu.
Juga, saya sudah memiliki setidaknya satu kesempatan di mana saya kehilangan kode sumber (di era kontrol pra-versi saya) tetapi memiliki kode yang dikompilasi dan Reflector membantu saya mendapatkan kode saya kembali. Dibutuhkan banyak pekerjaan karena komentar, nama variabel, dll salah tetapi itu membantu.
Juga, kadang-kadang Anda memiliki kode di, katakanlah, VB.NET dan Anda ingin melihat bagaimana hal itu dilakukan dalam, katakanlah, C # dan Reflector dapat beralih di antara berbagai bahasa.
sumber
Saat menggunakan Reflection.Emit untuk menghasilkan rakitan saat runtime, Reflector menjadi alat yang sangat berharga untuk memverifikasi secara visual kode yang dihasilkan seperti yang Anda harapkan.
sumber
Reflektor membantu Anda menemukan ketika dokumentasi salah. Saya menemukan bug dalam dokumentasi StringBuilder CLR kembali. NET 1.1. Dokumentasi untuk properti Length mengatakan ini:
Saya mencoba menggunakan StringBuilder dengan pemikiran ini, dan mendapatkan hasil yang aneh. Saya menggunakan Reflector, dan melihat masalahnya. Dokumentasi untuk properti Length di .NET 2.0 dan terus memiliki informasi yang benar:
Ini dapat membuat perbedaan besar jika, katakanlah, Anda menampilkan teks yang dihasilkan dengan MessageBox; MessageBox memotong teks pada karakter nol pertama.
Reflector memungkinkan untuk menemukan hal-hal seperti ini, untuk melihat bagaimana sebenarnya perilaku CLR , berbeda dengan apa yang dikatakan dokumentasi, atau untuk menjawab pertanyaan yang tidak dijawab oleh dokumentasi.
sumber
Terkadang lebih mudah untuk memahami apa yang dilakukan perpustakaan, bagaimana melakukannya, dan menggunakannya secara tepat dengan melihat kode sumbernya.
Di waktu lain, saya hanya ingin tahu dan ingin mengintip.
Cara umum lain yang saya gunakan Reflector adalah untuk melihat bagaimana Kerangka itu sendiri mengimplementasikan sesuatu.
Kadang-kadang, saya memiliki perpustakaan yang digunakan dalam proyek yang sangat lama dan kami tidak memiliki kode sumber atau dokumentasi. Reflektor sangat berharga dalam situasi-situasi itu.
Saya juga menggunakannya untuk rakitan hot-patch. Sudah ada beberapa kasus di mana saya perlu mengubah sedikit internal perpustakaan yang tidak dapat saya bangun kembali dan menggunakan Reflektor untuk menemukan titik yang sesuai dan kemudian memodifikasi IL perakitan (tidak, saya tidak berbicara tentang cracking, tetapi penggunaan yang sah dari fungsi ini).
sumber
Saya tidak akan mengatakan bahwa itu penting. Tetapi dalam kasus langka di mana Anda benar-benar membutuhkannya, itu sangat berguna.
Ambil sebuah contoh.
Baru-baru ini saya harus membuat beberapa kode yang dapat runtime membuat pohon ekspresi untuk yang berikut, tetapi tanpa mengetahui nama properti dependen pada waktu kompilasi:
Untuk secara dinamis mengatur tiruan (menggunakan kerangka kerja Moq).
Apa yang saya lakukan adalah mengkompilasi ekspresi asli menggunakan tipe beton, kemudian menggunakan reflektor, saya menemukan bahwa saya harus menulis kode berikut:
Saya akan bisa mencari tahu ini menggunakan trial and error. Tetapi reflektor membuatnya mudah.
sumber
Karena jika Anda tahu cara menggunakannya, Anda tidak memerlukan dokumentasi - dan sebagian besar API tidak memiliki dokumentasi yang berarti.
sumber