Nguồn mở thay thế cho Reflector? [đóng cửa]


419

Chỉ cần hỏi liệu có ai biết về một nguồn thay thế nguồn mở cho Reflector của RedGate không? Tôi muốn kiểm tra xem một công cụ tương tự như Reflector thực sự hoạt động như thế nào.

Lưu ý, nếu bạn biết về một giải pháp thay thế nguồn mở miễn phí nhưng không phải là Reflector, bạn có thể trả lời câu hỏi liên quan sau:

Tóm tắt - Cập nhật ngày 11 tháng 5 năm 2011

Làm tròn nhanh các dự án và công cụ nguồn mở khác nhau đã được đề xuất:

  1. Cơ sở hạ tầng trình biên dịch chung (CCI)
  2. Mono
  3. ILSpy
  4. dnSpy (ngã ba của ILSpy, dự án xuất hiện nhiều hơn so với ban đầu)
  5. Trình soạn thảo Dotnet IL (DILE)
  6. IL.View
  7. Monoflector ( không còn hoạt động kể từ tháng 4 năm 2011)

Các tài nguyên sau đây cũng có thể được quan tâm:


2
FYI, giờ đây đã có phiên bản v6 miễn phí vô thời hạn: eon.businesswire.com/news/eon/20110426007021/vi/.NET-Reflector/ trộm
thecoop


2
@Matt, nếu bạn kiểm tra ngày, câu hỏi này đã được hỏi trước cái gì đó tốt hơn so với .NET Reflector? câu hỏi Ngoài ra, câu hỏi này đặc biệt yêu cầu các lựa chọn thay thế nguồn mở.
MagicAndi

Câu trả lời:


31

Tôi có 2 lựa chọn.

Những điều này sẽ không cung cấp cho bạn C # mặc dù.


Leppie, cảm ơn. Tôi chấp nhận đây là câu trả lời, mặc dù đó là một lựa chọn khó khăn giữa câu trả lời của bạn và Jason Haley.
MagicAndi

CCI không có giao diện người dùng GUI (mà tôi biết). Nhưng trong nguồn hiện tại trong codeplex, có một API khá đơn giản để chuyển đổi AST được dịch ngược thành C #, fyi.
justin.m.chase

2
Mono.Cecil chỉ là một thư viện, phải không?
Robert Jeppesen

175

Cập nhật ngày 13 tháng 12 năm 2011

Các công cụ nguồn mở sau đây có sẵn:


1
Tôi đã sử dụng dile vài năm trước - đó là một trình gỡ lỗi và gỡ lỗi tuyệt vời - Tôi rất khuyến khích sử dụng lại khi tôi sử dụng nó. Tôi đã không sử dụng nó trong một thời gian.
Jason Haley

8
Phiên bản hiện tại của ILSpy (ILSpy v1.0.0.440, 20010228) đang hoạt động như tôi mong đợi. Tôi có thể duyệt các phương thức, thuộc tính và thậm chí mã nguồn cho lib C # mà không cần tệp PDB.
mathijsuitmegen

6
Mới bắt đầu sử dụng ILSpy. Rất hạnh phúc với nó cho đến nay. Thay thế hoàn hảo. Cảm ơn bạn SharpDevelop!
codemonkey

1
Chỉ cần bắt gặp công cụ này, rất vui khi thấy một sự thay thế cho một mặt hàng chủ lực trong vành đai công cụ của nhà phát triển .NET. Một số dịch ngược có chút kỳ lạ (nối chuỗi xuất hiện như IL sẽ thấy, nhưng không nhất thiết là mã được viết - không phải là một điều xấu), nhưng về tổng thể, một công cụ tuyệt vời!
CodeMonkey1313

5
Tôi vừa thử ILSpy và nó hoạt động rất tốt! Nó thậm chí còn xây dựng lại các biểu thức lambda và các phương thức lặp ("return return") ... wow! Tôi rất ấn tượng!
Qwertie

38

Một sự thay thế khác sẽ là dotPeek . JetBrains công bố nó là một công cụ miễn phí. Nó có thể sẽ có nhiều tính năng hơn khi được sử dụng với Resharper của họ nhưng ngay cả khi được sử dụng một mình, nó vẫn hoạt động rất tốt.

Trải nghiệm người dùng giống như MSVS hơn là một trình phân tách độc lập. Tôi thích đọc mã hơn trong Reflector. Điều hướng Ctrl + T cũng phù hợp với tôi hơn. Chỉ cần đồng bộ hóa cây với khung mã có thể tốt hơn.

Tất cả trong tất cả, nó vẫn đang được phát triển nhưng rất có thể sử dụng được.


2
Công cụ tuyệt vời, nhưng không phải là nguồn mở. Nó là miễn phí, tuy nhiên, điều đó có thể có nghĩa là nó đánh cắp ánh đèn sân khấu từ bất kỳ nguồn mở tương đương nào.
Drew Noakes

Ferdinand, -1 cho một công cụ nguồn đóng. Bạn nên thử thêm nó vào một trong những câu hỏi được liên kết cho Reflector.
MagicAndi

3
Tôi sẽ để lại câu trả lời của mình ở đây để làm cho thông tin đầy đủ hơn. Chủ đề này là dễ tìm thấy nhất bởi google và cũng là danh sách các công cụ khác ở đây là đầy đủ nhất. (Không phải tất cả trong số họ là OSS btw.)
Ferdinand Prantl

Ferdinand, tôi đã liên tục hạ thấp tất cả các câu trả lời đưa ra giải pháp nguồn đóng, cập nhật văn bản câu hỏi nhiều lần để xác định rằng tôi chỉ quan tâm đến OSS và đảm bảo rằng tất cả các giải pháp trong tóm tắt câu hỏi đều là nguồn mở. Chỉ có một giải pháp nguồn đóng khác trong chuỗi câu hỏi này, mà tôi cũng đã đánh giá thấp. Câu hỏi này đã được hỏi trước khi Redgate quyết định thu phí trở lại vào đầu năm nay và đặc biệt yêu cầu các giải pháp thay thế nguồn mở. Tôi cần làm gì hơn nữa?
MagicAndi

9
@MagicAndi Dừng phàn nàn sẽ là một khởi đầu. Tôi tìm thấy chủ đề này từ Google trong khi tìm kiếm một sự thay thế miễn phí. Tôi không thể quan tâm ít hơn nếu nó là nguồn mở hay không. @Ferdinand cảm ơn vì liên kết dotPeek, có vẻ đầy hứa hẹn.
Winston Smith

15

Telerik hôm nay đã phát hành bản Beta của công cụ dịch ngược riêng của họ, JustDecompile . Nguồn đóng, nhưng miễn phí và có vẻ đầy hứa hẹn.


Ray, xin lỗi, nhưng để phù hợp với cách tiếp cận câu trả lời của GrayWolf, tôi sẽ phải đánh giá thấp câu trả lời này. Câu hỏi này dành riêng cho các lựa chọn thay thế Nguồn mở. Cộng đồng .NET đã cho phép bản thân đi vào mớ hỗn độn này bằng cách dựa vào một giải pháp nguồn đóng; chúng ta nên tránh điều này trong tương lai, bất kể ai đang cung cấp công cụ này. -1
MagicAndi

Ray, hóa ra đề nghị Kaliro của tôi cũng là một tiện ích nguồn đóng. Xin vui lòng đáp lại downvote - Tôi xứng đáng! Thật không may, bạn không thể bỏ phiếu cho câu trả lời của riêng bạn, dù lên hay xuống.
MagicAndi

1
@MagicAndi - Sẽ dễ dàng hơn để xóa câu trả lời của bạn hơn là tải xuống nó. Nếu bạn không cảm thấy nó tăng thêm bất kỳ giá trị nào thì bạn có khả năng khiến "biến mất".
jpierson

1
Đừng xóa / downvote câu trả lời này. Các câu hỏi SO khác về các lựa chọn thay thế miễn phí đang được đóng lại dưới dạng "bản sao" của câu hỏi này bởi người điều hành! Vì vậy, thông tin có giá trị ở đây.
Alex

JustDecompile là một ứng dụng lỗi đáng xấu hổ luôn gặp sự cố và hiển thị rất nhiều trường hợp ngoại lệ nơi mã phải được. Ngoài ra nó rất chậm. .NET Reflector tốt hơn nhiều so với crap!
Elmue

12

ILSpy hoạt động rất tốt!

Theo như tôi có thể nói nó làm mọi thứ mà Reflector đã làm và trông cũng vậy.


10

Trên thực tế, tôi khá chắc chắn Reflector được coi là một trình dịch ngược với một số chức năng dịch ngược. Disassembler vì nó đọc các byte ra khỏi tệp của assembly và chuyển đổi nó thành ngôn ngữ hợp ngữ (ILasm trong trường hợp này). Chức năng Decompiler mà nó cung cấp bằng cách phân tích IL thành các mẫu nổi tiếng (như biểu thức và câu lệnh) sau đó được dịch sang các ngôn ngữ cấp cao hơn như C #, VB.Net, v.v. Addin api cho Reflector cho phép bạn viết trình dịch ngôn ngữ của riêng mình nếu bạn muốn ... tuy nhiên sự kỳ diệu của cách nó phân tích IL vào các cây biểu hiện là một bí mật được bảo vệ chặt chẽ.

Tôi khuyên bạn nên xem xét bất kỳ điều nào trong ba điều được đề cập ở trên nếu bạn muốn hiểu cách thức hoạt động của trình phân tách IL: Dile, CCI và Mono đều là những nguồn tốt cho công cụ này.

Tôi cũng khuyên bạn nên nhận thông số Ecma 335 và cuốn sách của Serge Lidin.


liên kết này có vẻ không ổn
Lyra

Vâng, xin lỗi tôi đã gỡ trang web đó xuống năm ngoái và không thay thế nó.
Jason Haley

8

Lý do chính mà tôi đã sử dụng Reflector (và, tôi nghĩ, lý do chính mà hầu hết mọi người sử dụng nó) là vì trình dịch ngược của nó: nó có thể dịch lại IL của phương thức thành mã nguồn.

Về tính đó, Monoflector sẽ là dự án đáng xem. Nó sử dụng Cecil, công cụ phản chiếu và Cecil.Decompiler, công cụ dịch ngược. Nhưng Monoflector xếp một giao diện người dùng lên trên cả hai thư viện, điều này sẽ cung cấp cho bạn một ý tưởng rất hay về cách sử dụng API.

Monoflector cũng là một thay thế hợp lý cho Reflector hoàn toàn. Nó cho phép bạn duyệt các loại và dịch ngược các phương thức, đó là 99% những gì mọi người đã sử dụng Reflector cho. Nó rất thô ráp xung quanh các cạnh, nhưng tôi nghĩ rằng nó sẽ thay đổi nhanh chóng.


5

Chà, Reflector tự nó là một hội đồng .NET để bạn có thể mở Reflector.exe trong Reflector để kiểm tra xem nó được xây dựng như thế nào.


14
Không, bạn không thể. Phản xạ bị che khuất.
Jeff Yates

14
Bạn không thể mở Reflector trong Reflector? Tôi vừa mới làm điều đó - obfuscation chỉ đơn giản là làm tổn thương khả năng đọc của IL vì số nhận dạng và tên loại được đọc sai nhưng điều đó không có nghĩa là bạn không thể tháo rời nó.
Andrew Hare

13
Andrew - khi ở trong một cái hố, ngừng đào ...
MagicAndi

2
Hmm ... Tôi có phiên bản 5.1.6.0 và tôi có thể thấy nguồn tốt - chỉ các tên định danh bị xáo trộn. Không hoàn hảo có, nhưng tôi đang xem nguồn C # của Reflector ngay bây giờ. :)
Andrew Hare

7
@Andrew Hare: Nếu bạn cố gắng xem các triển khai phương thức thông qua gương phản xạ trong gương phản xạ, bạn sẽ thấy "Điều này bị che khuất" và nó sẽ không hiển thị nên không, bạn không thể sử dụng Reflector. Bên cạnh đó, việc mô phạm về những gì OP muốn với OP là một trận thua.
Jeff Yates

3

Tôi hiện đang làm việc trên một trình dịch ngược / dịch ngược mã nguồn mở có tên là Trình phân tích hội. Nó tạo mã nguồn cho các phương thức, hiển thị siêu dữ liệu và tài nguyên lắp ráp và cho phép bạn đi qua các phụ thuộc.

Dự án được lưu trữ trên CodePlex => http://asmanalyzer.codeplex.com/


1

Công cụ Reflector sử dụng Reflection.   - hình như điều này không đúng

Bạn đã yêu cầu hai điều - mã cho thấy những gì phản xạ làm, và cũng là một thay thế cho phản xạ.

Đây là một ví dụ, được đơn giản hóa nhiều so với những gì Reflector làm, nhưng nó cho thấy kỹ thuật phản chiếu: TypeView.cs

Tôi không có đề xuất thay thế Reflector nguồn mở.


Uhm, nếu với "Reflection", bạn đề cập đến "System.Reflection" của .NET framework, tôi rất nghi ngờ điều đó.
Christian.K

3
@ Christian.K: Không, Reflector không sử dụng System.Reflectiontrong khung, Roeder tuyên bố từ rất sớm vì các vấn đề với việc tải và dỡ lắp ráp.
casperOne

@casperOne, tôi không biết chính xác .NET Reflector hoạt động như thế nào trong nội bộ, nhưng System.Reflectionkhông gian tên đã được mở rộng kể từ những ngày đầu của .NET Reflector. Bây giờ nó hỗ trợ các hội đồng tải và không tải trong bối cảnh chỉ phản chiếu: stackoverflow.com/questions/225330/NH
Drew Noakes 26/03

1
@Drew Noakes: Điều này là đúng, nhưng Roeder không bao giờ tuyên bố (theo hiểu biết của tôi) rằng anh ấy đã quay trở lại Reflection sau khi thay đổi này được thực hiện.
casperOne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.