Alternatif Sumber Terbuka untuk Reflektor? [Tutup]

419

Hanya untuk bertanya apakah ada yang tahu alternatif sumber terbuka untuk RedGate's Reflector ? Saya tertarik memeriksa bagaimana alat yang mirip dengan Reflector sebenarnya berfungsi.

Catatan, jika Anda mengetahui alternatif sumber bebas tapi tidak terbuka untuk Reflektor, Anda dapat menjawab pertanyaan terkait berikut:

Ringkasan - Diperbarui 11 Mei 2011

Ringkasan singkat berbagai proyek sumber terbuka dan alat yang telah disarankan:

  1. Infrastruktur Penyusun Umum (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy (garpu ILSpy, proyek tampak lebih aktif daripada yang asli)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. Monoflektor ( tidak lagi aktif pada April 2011)

Sumber daya berikut mungkin juga menarik:

  • TypeView.cs
  • Catatan Jason Haley tentang pembongkaran .NET
  • Posting blog terbaru Adrian Bank merangkum sejumlah alternatif Reflector, termasuk beberapa opsi yang tidak disebutkan di bawah ini.
  • Posting rinci blog Mark Lichtenberg membandingkan beberapa alternatif sumber terbuka (DILE, ILSpy dan Mono Cecil menggunakan MonoDevelop) ke Reflector.
MagicAndi
sumber
2
FYI, sekarang ada versi v6 yang akan gratis tanpa batas waktu
thecoop
2
@ Matt, jika Anda memeriksa tanggal, pertanyaan ini ditanyakan sebelum Sesuatu yang Lebih Baik dari .NET Reflector? pertanyaan. Selain itu, pertanyaan ini secara khusus meminta alternatif sumber terbuka.
MagicAndi

Jawaban:

31

2 opsi yang saya tahu.

  • CCI
  • Mono Cecil

Ini tidak akan memberi Anda C # sekalipun.

leppie
sumber
Leppie, terima kasih. Saya menerima ini sebagai jawabannya, meskipun itu adalah pilihan yang sulit antara jawaban Anda dan Jason Haley.
MagicAndi
CCI tidak memiliki front-end GUI (yang saya ketahui). Tetapi dalam sumber saat ini di codeplex ada API yang cukup sederhana untuk mengubah AST yang di-decompile menjadi C #, fyi.
justin.m.chase
2
Mono.Cecil hanya perpustakaan, kan?
Robert Jeppesen
175

Updated 13 Desember 2011

Alat sumber terbuka berikut tersedia:

MagicAndi
sumber
1
Saya menggunakan dile beberapa tahun yang lalu - ini adalah disassembler yang bagus DAN debugger - Saya sangat merekomendasikannya kembali ketika saya menggunakannya. Saya belum menggunakannya untuk sementara waktu.
Jason Haley
8
Versi saat ini dari ILSpy (ILSpy v1.0.0.440, 20010228) berfungsi seperti yang saya harapkan. Saya dapat menelusuri metode, properti, dan bahkan kode sumber untuk C # lib tanpa file PDB.
mathijsuitmegen
6
Baru mulai menggunakan ILSpy. Sangat senang dengan itu sejauh ini. Replacemenet sempurna. SharpDevelop terima kasih!
codemonkey
1
Baru saja menemukan alat ini, sangat senang melihat pengganti untuk pokok di sabuk alat pengembang NET. Beberapa dekompilasi agak aneh (rangkaian string muncul seperti IL akan melihatnya, tetapi tidak harus seperti kode yang ditulis - bukan hal yang buruk), tetapi secara keseluruhan, alat yang hebat!
CodeMonkey1313
5
Saya baru saja mencoba ILSpy dan ini bekerja dengan sangat baik! Bahkan merekonstruksi ekspresi lambda dan metode iterator ("hasil balik") ... wow! Saya terkesan!
Qwertie
38

Pengganti lainnya adalah dotPeek . JetBrains mengumumkannya sebagai alat gratis. Itu mungkin akan memiliki lebih banyak fitur ketika digunakan dengan Resharper mereka tetapi bahkan ketika digunakan sendiri itu bekerja dengan sangat baik.

Pengalaman pengguna lebih seperti MSVS daripada disassembler mandiri. Saya suka membaca kode daripada di Reflector. Navigasi Ctrl + T juga cocok untuk saya. Hanya menyinkronkan pohon dengan panel kode bisa lebih baik.

Semua dalam semua, itu masih dalam pengembangan tetapi sudah dapat digunakan dengan sangat baik.

Ferdinand Prantl
sumber
2
Alat yang hebat, tetapi tidak open source. Ini gratis, namun, yang dapat berarti mencuri sorotan dari semua sumber setara.
Drew Noakes
Ferdinand, -1 untuk alat sumber tertutup. Anda harus mencoba menambahkan ini ke salah satu pertanyaan terkait untuk Reflektor.
MagicAndi
3
Saya meninggalkan jawaban saya di sini untuk membuat informasi lebih lengkap. Utas ini adalah yang paling mudah ditemukan oleh google dan juga daftar alat lain di sini adalah yang paling lengkap. (Tidak semuanya OSS btw.)
Ferdinand Prantl
Ferdinand, saya secara konsisten menurunkan semua jawaban yang memberikan solusi sumber tertutup, memperbarui teks pertanyaan berulang kali untuk menentukan bahwa saya hanya tertarik pada OSS, dan memastikan bahwa semua solusi dalam ringkasan pertanyaan adalah open source. Hanya ada satu solusi sumber tertutup lainnya di utas pertanyaan ini, yang juga telah saya undurkan. Pertanyaan ini diajukan sebelum keputusan Redgate untuk menarik kembali awal tahun ini dan secara khusus meminta alternatif sumber terbuka. Apa lagi yang harus saya lakukan?
MagicAndi
9
@MagicAndi Berhenti mengeluh akan menjadi awal. Saya menemukan utas ini dari Google sambil mencari alternatif gratis. Saya tidak peduli apakah itu open source atau tidak. @Ferdinand terima kasih atas tautan dotPeek, terlihat menjanjikan.
Winston Smith
15

Telerik hari ini merilis Beta dari alat dekompilasi mereka sendiri, JustDecompile . Sumber tertutup, tetapi gratis dan terlihat menjanjikan.

ray glover
sumber
Ray, permintaan maaf, tetapi agar konsisten dengan pendekatan pada jawaban GrayWolf, aku harus membatalkan jawaban ini. Pertanyaan ini khusus untuk alternatif Open Source. Komunitas .NET membiarkan dirinya masuk ke kekacauan ini dengan mengandalkan solusi sumber tertutup; kita harus menghindari ini di masa depan, terlepas dari siapa yang menyediakan alat. -1
MagicAndi
Ray, ternyata saran Kaliro saya juga merupakan utilitas sumber tertutup. Jangan ragu untuk membalas downvote - Saya layak menerimanya! Sayangnya, Anda tidak dapat memberikan suara pada jawaban Anda sendiri, baik naik atau turun.
MagicAndi
1
@MagicAndi - Akan lebih mudah untuk menghapus jawaban Anda daripada menurunkannya. Jika Anda tidak merasa itu menambah nilai apa pun maka Anda memiliki kekuatan untuk membuat "pergi".
jpierson
1
Jangan hapus / jangan pilih jawaban ini. Pertanyaan SO lainnya tentang alternatif gratis ditutup sebagai "duplikat" dari pertanyaan ini oleh moderator! jadi info yang berharga ada di sini.
Alex
JustDecompile adalah aplikasi buggy memalukan yang crash sepanjang waktu dan menunjukkan banyak pengecualian di mana kode seharusnya. Selain itu sangat lambat. .NET Reflector JAUH lebih baik daripada omong kosong itu!
Elmue
12

ILSpy berfungsi dengan baik!

Sejauh yang saya tahu itu melakukan semua yang Reflector lakukan dan terlihat sama juga.

rampok
sumber
10

Sebenarnya, saya cukup yakin Reflector dianggap disassembler dengan beberapa fungsi dekompiler. Disassembler karena ia membaca byte dari file assembly dan mengubahnya menjadi bahasa assembly (ILasm dalam hal ini). Fungsionalitas Decompiler yang disediakannya dengan mem-parsing IL ke dalam pola-pola terkenal (seperti ekspresi dan pernyataan) yang kemudian diterjemahkan ke dalam bahasa tingkat yang lebih tinggi seperti C #, VB.Net, dll. Addin api untuk Reflector memungkinkan Anda untuk menulis penerjemah bahasa Anda sendiri jika Anda berharap ... namun keajaiban bagaimana mem-parsing IL ke dalam pohon ekspresi adalah rahasia yang dijaga ketat.

Saya akan merekomendasikan melihat salah satu dari tiga hal yang disebutkan di atas jika Anda ingin memahami cara kerja pembongkar IL: Dile, CCI dan Mono adalah sumber yang bagus untuk hal ini.

Saya juga sangat merekomendasikan mendapatkan spec Ecma 335 dan buku Serge Lidin juga.

Jason Haley
sumber
tautan ini tampaknya tidak
berfungsi
Ya, maaf saya mengambil situs itu tahun lalu dan belum menggantinya.
Jason Haley
8

Alasan utama saya menggunakan Reflector (dan, saya pikir, alasan utama kebanyakan orang menggunakannya) adalah karena dekompilernya: ia dapat menerjemahkan kembali metode IL ke dalam kode sumber.

Pada hitungan itu, Monoflector akan menjadi proyek untuk menonton. Ia menggunakan Cecil, yang melakukan refleksi, dan Cecil.Decompiler, yang melakukan dekompilasi. Tapi Monoflector melapisi UI di atas kedua pustaka, yang seharusnya memberi Anda ide yang sangat baik tentang cara menggunakan API.

Monoflektor juga merupakan alternatif yang layak untuk Reflector secara langsung. Ini memungkinkan Anda menelusuri jenis dan mendekompilasi metode, yang merupakan 99% dari apa yang digunakan Reflektor untuk orang. Sangat kasar di tepinya, tapi saya berpikir itu akan berubah dengan cepat.

Joe White
sumber
5

Yah, Reflector itu sendiri adalah .NET assembly sehingga Anda dapat membuka Reflector.exe di Reflector untuk memeriksa bagaimana itu dibangun.

Andrew Hare
sumber
14
Tidak bisa. Reflektor dikaburkan.
Jeff Yates
14
Anda tidak dapat membuka Reflektor di Reflektor? Saya baru saja melakukannya - kebingungan hanya merusak keterbacaan IL karena pengidentifikasi dan nama ketik hancur, tetapi itu tidak berarti bahwa Anda tidak dapat membukanya.
Andrew Hare
13
Andrew - ketika dalam lubang, berhenti menggali ...
MagicAndi
2
Hmm ... Saya memiliki versi 5.1.6.0 dan saya dapat melihat sumbernya dengan baik - hanya nama pengenal yang dikaburkan. Tidak sempurna ya, tapi saya melihat sumber C # Reflektor sekarang. :)
Andrew Hare
7
@Andrew Hare: Jika Anda mencoba untuk melihat implementasi metode melalui reflektor di reflektor Anda akan melihat "Ini dikaburkan" dan itu tidak akan ditampilkan begitu tidak, Anda tidak dapat menggunakan Reflektor. Selain itu, menjadi pedantic tentang apa yang diinginkan OP dengan OP adalah pertempuran yang kalah.
Jeff Yates
3

Saat ini saya sedang mengerjakan disassembler / decompiler open source yang disebut Assembly Analyzer. Ini menghasilkan kode sumber untuk metode, menampilkan majelis metadata dan sumber daya, dan memungkinkan Anda untuk berjalan melalui dependensi.

Proyek ini di-host di CodePlex => http://asmanalyzer.codeplex.com/

Codewhisperer84
sumber
1

Alat Reflektor menggunakan Refleksi.   - ternyata ini tidak benar.

Anda meminta dua hal - kode yang menunjukkan apa yang reflektor lakukan, dan juga alternatif untuk reflektor.

Berikut ini sebuah contoh, jauh disederhanakan dari apa yang dilakukan Reflector, tetapi ini menunjukkan teknik refleksi: TypeView.cs

Saya tidak punya saran untuk penggantian Reflektor open-source.

Cheeso
sumber
Uhm, jika dengan "Refleksi" Anda merujuk ke "System.Reflection" dari kerangka NET., Saya akan sangat meragukan itu.
Christian.K
3
@ Christian.K: Tidak, Reflector tidak digunakan System.Reflectiondalam kerangka kerja, Roeder menyatakan sangat awal karena masalah dengan bongkar muat perakitan.
casperOne
@casperOne, saya tidak tahu persis bagaimana .NET Reflector bekerja secara internal, tetapi System.Reflectionnamespace telah diperpanjang sejak awal. NET Reflector. Sekarang mendukung rakitan bongkar dan muat dalam konteks hanya refleksi: stackoverflow.com/questions/225330/…
Drew Noakes
1
@Drew Noakes: Ini benar, tetapi Roeder tidak pernah menyatakan (setahu saya) bahwa dia telah pindah kembali ke Reflection setelah perubahan ini dilakukan.
CasperOne