Reflektöre Açık Kaynak Alternatifler? [kapalı]


419

RedGate'in Reflektörüne açık kaynak alternatifi bilen var mı? Reflector benzeri bir aracın aslında nasıl çalıştığını kontrol etmek istiyorum.

Ücretsiz bir ama biliyorsan Not değil Reflektöre açık kaynak alternatif, aşağıdaki ilgili soruya cevap verebilir:

Özet - Güncellendi 11 Mayıs 2011

Önerilen çeşitli açık kaynaklı projeler ve araçların hızlı bir şekilde toplanması:

  1. Ortak Derleyici Altyapısı (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy ( ILSpy'nin çatalı, proje orijinalden daha aktif görünüyor)
  5. Dotnet IL Editör (DILE)
  6. IL.View
  7. Monoflektör ( Nisan 2011 itibarıyla artık aktif değil )

Aşağıdaki kaynaklar da ilgi çekici olabilir:

  • TypeView.cs
  • Jason Haley'in .NET'i sökmeye ilişkin notları
  • Adrian Bank'ın , aşağıda belirtilmeyen çeşitli seçenekler de dahil olmak üzere bir dizi Reflektör alternatifini özetleyen son blog yazısı .
  • Mark Lichtenberg'in açık blog alternatiflerinden bazılarını (MonoDevelop kullanarak DILE, ILSpy ve Mono Cecil) Reflector ile karşılaştıran ayrıntılı blog yazısı .

2
FYI, artık süresiz
thecoop


2
@Matt, tarihleri ​​kontrol ederseniz, bu soru .NET Reflektörden Daha İyi Bir Şey? soru. Ayrıca, bu soru özellikle açık kaynak alternatifleri istemektedir.
MagicAndi

Yanıtlar:


31

Bildiğim 2 seçenek.

  • CCI
  • Mono Cecil

Bunlar size C # vermeyecektir.


Leppie, teşekkürler. Cevabınız ve Jason Haley'in arasında zor bir seçim olmasına rağmen bunu cevap olarak kabul ediyorum.
MagicAndi

CCI'nin bir GUI ön ucu yok (farkında olduğum). Ancak codeplex'teki mevcut kaynakta, ayrıştırılmış AST'yi C #, fyi'ye dönüştürmek için oldukça basit bir API var.
justin.m.chase

2
Mono.Cecil sadece bir kütüphane, değil mi?
Robert Jeppesen

175

Güncelleme: 13 Aralık 2011

Aşağıdaki açık kaynak araçları mevcuttur:

  • SharpDevelop ekibinden ILSpy . Scott Hanselman'ın aracı vurgulayan tweet'i sayesinde .
  • Dotnet IL Editor (bir sökücü)
  • IL.View - Tarayıcı Dışı Silverlight Uygulaması olarak Silverlight 4'te yazılmış bir .NET Reflektör alternatifi. Ayrıntılar için bu blog yayınına bakın.

1
Birkaç yıl önce dile kullandım - harika bir sökücü ve hata ayıklayıcı - Ben onu kullanırken kesinlikle tavsiye. Bir süredir kullanmadım.
Jason Haley

8
Geçerli ILSpy sürümü (ILSpy v1.0.0.440, 20010228) beklediğim gibi çalışıyor. Ben PDB dosyası olmadan bir C # lib için yöntemleri, özellikleri ve hatta kaynak kodu göz atabilirsiniz.
mathijsuitmegen

6
ILSpy kullanmaya yeni başladım. Şimdiye kadar çok mutlu. Mükemmel yedek parça. Teşekkürler SharpDevelop!
codemonkey

1
Bu geliştiriciyle yeni tanıştım, .NET geliştiricisinin alet kemerinde bir zımbanın yerini aldığını görmek çok mutlu. Ayrıştırmalardan bazıları biraz garip (IL'nin göreceği gibi dize birleştirme ortaya çıkıyor, ancak kodun yazıldığı gibi değil - kötü bir şey değil), ama genel olarak harika bir araç!
CodeMonkey1313

5
Ben sadece ILSpy denedim ve harika çalışıyor! Hatta lambda ifadelerini ve yineleyici ("geri dönüş") yöntemlerini yeniden yapılandırır ... vay! Etkilendim!
Qwertie

38

Başka bir değişiklik dotPeek olacaktır . JetBrains bunu ücretsiz bir araç olarak ilan etti. Resharper'larıyla birlikte kullanıldığında muhtemelen daha fazla özelliğe sahip olacak, ancak tek başına kullanıldığında bile çok iyi çalışıyor.

Kullanıcı deneyimi, bağımsız bir sökücüden çok MSVS'ye benzer. Kod okumayı Reflector'dan daha çok seviyorum. Ctrl + T navigasyon da bana daha uygun. Ağacı kod bölmesiyle senkronize etmek daha iyi olabilir.

Sonuçta, hala geliştirme aşamasında ama çok iyi kullanılabilir.


2
Harika bir araç, ancak açık kaynak değil. Ancak ücretsizdir, bu da herhangi bir açık kaynak eşdeğerinden spot ışığını çaldığı anlamına gelebilir.
Drew Noakes

Ferdinand, kapalı kaynak aracı için -1. Bunu Reflektör için bağlantılı sorulardan birine eklemeyi denemelisiniz.
MagicAndi

3
Bilgileri daha eksiksiz hale getirmek için cevabımı burada bırakıyorum. Bu konu google tarafından bulmak en kolay ve aynı zamanda burada diğer araçların listesi en eksiksiz. (Hepsi OSS btw değil.)
Ferdinand Prantl

Ferdinand, kapalı kaynak çözümleri veren tüm cevapları tutarlı bir şekilde indirdim, soru metnini yalnızca OSS ile ilgilendiğimi belirtmek için tekrar tekrar güncelledim ve soru özetindeki tüm çözümlerin açık kaynak olduğundan emin oldum. Bu soru dizisinde, aynı zamanda indirdiğim sadece bir kapalı kaynak çözümü daha var. Bu soru, Redgate'in bu yılın başlarında geri ödeme kararı almadan önce sorulmuş ve özellikle açık kaynak alternatifleri istemiştir. Daha ne yapmam gerekiyor?
MagicAndi

9
@MagicAndi Şikayet etmeyi durdurmak bir başlangıç ​​olacaktır. Bu konuyu Google'dan ücretsiz bir alternatif ararken buldum. Açık kaynak olsun ya da olmasın daha az umursamadım. @Derdinand dotPeek bağlantısı için teşekkürler, umut verici görünüyor.
Winston Smith

15

Telerik bugün kendi dekompilasyon aracı JustDecompile'ın Beta sürümünü yayınladı . Kapalı kaynak, ama özgür ve umut verici görünüyor.


Ray, özür dilerim, ama GrayWolf cevabına yaklaşımla tutarlı olmak için, bu cevabı küçümsemek zorunda kalacağım. Bu soru özellikle Açık Kaynak alternatifleri içindir. .NET topluluğu, kapalı bir kaynak çözümüne güvenerek bu karmaşaya girmesine izin verdi; aracı kimin sağladığından bağımsız olarak gelecekte bundan kaçınmalıyız. -1
MagicAndi

Ray, Kaliro'nun önerisinin de kapalı bir kaynak olduğu ortaya çıktı. Lütfen aşağı oyu karşılık vermekten çekinmeyin - bunu hak ediyorum! Ne yazık ki, kendi cevaplarınıza yukarı veya aşağı oy veremezsiniz.
MagicAndi

1
@MagicAndi - Cevabınızı silmek, oyunuzu düşürmekten daha kolay olacaktır. Eğer herhangi bir değer kattığını hissetmiyorsanız, o zaman "gitmiş" olma gücüne sahipsiniz.
jpierson

1
Bu yanıtı kaldırmayın / indirmeyin. Ücretsiz alternatiflerle ilgili diğer SO soruları, bu sorunun moderatörleri tarafından "kopyaları" olarak kapatılıyor! bilgi burada olmaya değer.
Alex

JustDecompile her zaman çöküyor ve kod olması gereken çok sayıda istisna gösteren utanç verici bir adamcağız uygulamasıdır. Bunun dışında çok yavaş. .NET Reflector bu saçmalıktan çok daha iyi!
Elmue

12

ILSpy harika çalışıyor!

Anlayabildiğim kadarıyla Reflector'un yaptığı her şeyi yapıyor ve aynı görünüyor.


10

Aslında, Reflector'un bazı decompiler işlevlerine sahip bir sökücü olarak kabul edildiğinden eminim. Disassembler, baytları bir montajın dosyasından okur ve bir montaj diline dönüştürür (bu durumda ILasm). IL'yi, daha sonra C #, VB.Net, vb. Gibi daha üst düzey dillere çevrilen iyi bilinen kalıplara (ifadeler ve ifadeler gibi) ayrıştırarak sağladığı Decompiler işlevi, Reflector için addin api, kendi dil çevirmeninizi yazmanıza izin verir. ancak… IL'yi ifade ağaçlarına nasıl ayrıştırdığı büyüsü, yakından korunan bir sırdır.

IL sökücülerin nasıl çalıştığını anlamak istiyorsanız, yukarıda belirtilen üç şeyden birine bakmanızı tavsiye ederim: Dile, CCI ve Mono, bu şeyler için iyi kaynaklar.

Ayrıca Ecma 335 spec ve Serge Lidin'in kitabını da almanızı tavsiye ederim.


Bu bağlantı aşağı görünüyor
Lyra

Evet, özür dilerim geçen yıl siteyi kaldırdım ve değiştirmedim
Jason Haley

8

Reflektör'ü kullanmamın ana nedeni (ve çoğu insanın bunu kullanmasının ana nedeni) dekomperiyosuydu: bir yöntemin IL'sini kaynak koduna geri çevirebilir.

Bu bağlamda , izlenmesi gereken proje Monoflector olacaktır. Yansımayı yapan Cecil'i ve ayrışmayı yapan Cecil.Decompiler'ı kullanır. Ancak Monoflector, her iki kütüphanenin üstüne bir arayüz ekler, bu da size API'yi nasıl kullanacağınız hakkında çok iyi bir fikir vermelidir.

Monoflector aynı zamanda Reflektör'e iyi bir alternatiftir. İnsanlara Reflektör kullandıklarının% 99'u olan türlere göz atmanıza ve yöntemleri koda etmenize olanak tanır. Kenarlarda çok pürüzlü, ama bunun hızla değişeceğini düşünüyorum.


5

Peki, Reflector'un kendisi bir .NET derlemesidir, böylece Reflector.exe'yi nasıl oluşturulduğunu kontrol etmek için Reflector'da açabilirsiniz.


14
Hayır, yapamazsınız. Reflektör gizlenmiştir.
Jeff Yates

14
Reflektör'ü Reflektörde açamıyor musunuz? Sadece yaptım - gizleme sadece tanımlayıcılar ve tip isimleri karıştırıldığı için IL'nin okunabilirliğini incitir, ancak bu onu sökemeyeceğiniz anlamına gelmez.
Andrew Hare

13
Andrew - ne zaman bir delik, kazma dur ...
MagicAndi

2
Hmm ... 5.1.6.0 sürümüne sahibim ve kaynağı gayet iyi görebiliyorum - sadece tanımlayıcı adları gizleniyor. Mükemmel değil evet, ama şu anda Reflektör C # kaynağına bakıyorum. :)
Andrew Hare

7
@Andrew Hare: Reflektörde reflektör aracılığıyla yöntem uygulamalarına bakmaya çalışırsanız, "Bu gizlidir" ifadesini görürsünüz ve bunu göstermez. Hayır, Reflektörü kullanamazsınız. Ayrıca, OP'nin OP ile ne istediğine dair bilgiç olmak kaybedilen bir savaştır.
Jeff Yates

3

Şu anda Assembly Analyzer adlı açık kaynaklı bir sökücü / dekompresör üzerinde çalışıyorum. Yöntemler için kaynak kodu oluşturur, derleme meta verilerini ve kaynaklarını görüntüler ve bağımlılıklar arasında gezinmenizi sağlar.

Proje CodePlex => http://asmanalyzer.codeplex.com/ adresinde barındırılmaktadır.


1

Reflektör aracı Yansıma kullanır.   - görünüşe göre bu doğru değil.

İki şey istediniz - reflektörün ne yaptığını gösteren kod ve ayrıca reflektöre bir alternatif.

Reflector'un yaptıklarından çok daha basitleştirilmiş bir örnek, ancak yansıma tekniğini gösteriyor: TypeView.cs

Açık kaynaklı bir Reflektör değişimi için önerim yok.


Uhm, "Yansıma" ile .NET framework "System.Reflection" atıfta bulunursanız, bundan çok şüphe ediyorum.
Christian.K

3
@ Christian.K: Hayır, Reflektör System.Reflectionçerçevede kullanmıyor , Roeder montaj yükleme ve boşaltma sorunları nedeniyle çok erken olduğunu belirtti.
casperOne

@casperOne, .NET Reflector'un dahili olarak nasıl çalıştığını tam olarak bilmiyorum, ancak System.Reflectionad alanı .NET Reflector'un ilk günlerinden beri genişletildi. Artık yalnızca yansıma bağlamında yükleme ve boşaltma montajlarını destekliyor: stackoverflow.com/questions/225330/…
Drew Noakes

1
@ Çekti Noakes: Bu doğrudur, ancak Roeder (bildiklerime göre) bu değişiklik yapıldıktan sonra Yansıma'ya geri döndüğünü asla söylemedi.
casperOne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.