反射器的开源替代品?

Mag*_*ndi 419 .net reflection reflector open-source

只是想知道是否有人知道RedGate的Reflector的开源替代品?我很想知道一个类似于Reflector的工具是如何工作的.

请注意,如果您知道Reflector 的免费但开源替代方案,您可以回答以下相关问题:

摘要 - 2011年5月11日更新

快速汇总已建议的各种开源项目和工具:

  1. 通用编译器基础结构(CCI)
  2. 单声道塞西尔
  3. ILSpy
  4. dnSpy(ILSpy的分支,项目看起来比原来更活跃)
  5. Dotnet IL编辑器(DILE)
  6. IL.View
  7. Monoflector(截至2011年4月不再有效)

以下资源也可能是有意义的:

  • TypeView.cs
  • Jason Haley关于拆解.NET的说明
  • Adrian Bank最近的博客文章总结了许多Reflector的替代方案,包括下面没有提到的几个选项.
  • Mark Lichtenberg的详细博客文章将几个开源替代品(DILE,ILSpy和使用MonoDevelop的Mono Cecil)与Reflector进行了比较.

Mag*_*ndi 175

2011年12月13日更新

以下开源工具可用:

  • 当前版本的ILSpy(ILSpy v1.0.0.440,20010228)正如我预期的那样工作.我可以在没有PDB文件的情况下浏览C#lib的方法,属性甚至源代码. (8认同)
  • 刚开始使用ILSpy.到目前为止非常满意.完美的替代品.谢谢SharpDevelop! (6认同)
  • 我刚试过ILSpy,效果很好!它甚至重建了lambda表达式和迭代器("yield return")方法......哇!我很佩服! (5认同)

Fer*_*ntl 38

另一个替代品是dotPeek.JetBrains宣布它是一款免费工具.当与Resharper一起使用时,它可能会有更多功能,但即使单独使用它也能很好地工作.

用户体验更像是MSVS,而不是独立的反汇编程序.我喜欢代码阅读比Reflector更多.Ctrl + T导航也更适合我.只需将树与代码窗格同步就可以了.

总而言之,它仍处于开发阶段,但已经非常有用.

  • @MagicAndi停止抱怨将是一个开始.我在寻找免费替代品时从谷歌找到了这个帖子.我不在乎它是否是开源的.@Ferdinand感谢dotPeek链接,看起来很有希望. (9认同)
  • 我在这里留下我的答案,以使信息更完整.这个帖子是谷歌最容易找到的,这里的其他工具列表也是最完整的.(并非所有这些都是OSS顺便说一句.) (3认同)
  • 伟大的工具,但不是开源.然而,这是免费的,这可能意味着它从任何开源等价物中抢走了聚光灯. (2认同)

lep*_*pie 31

我知道的两个选项.

  • CCI
  • 单声道塞西尔

这些不会给你C#.

  • Mono.Cecil只是一个图书馆,对吧​​? (2认同)

小智 15

Telerik今天发布了他们自己的反编译工具JustDecompile的测试版.封闭源,但免费,看起来很有希望.


Rob*_*Rob 12

ILSpy非常棒!

据我所知,它做了Reflector所做的一切,看起来也一样.


Jas*_*ley 10

实际上,我很确定Reflector被认为是具有一些反编译功能的反汇编程序.反汇编程序,因为它从程序集的文件中读取字节并将其转换为汇编语言(在本例中为ILasm).它通过将IL解析为众所周知的模式(如表达式和语句)提供的Decompiler功能,然后将其转换为更高级别的语言,如C#,VB.Net等.Reflector的addin api允许您编写自己的语言翻译器,如果你希望...但是它如何将IL解析为表达树的魔力是一个严密保密的秘密.

如果你想了解IL反汇编程序是如何工作的,我建议你查看上面提到的三个方面中的任何一个:Dile,CCI和Mono都是这个东西的好来源.

我也强烈推荐获得Ecma 335规范和Serge Lidin的书.


Joe*_*ite 8

我使用Reflector(以及我认为,大多数人使用它的主要原因)的主要原因是它的反编译器:它可以将方法的IL转换回源代码.

在那个数字上,Monoflector将成为值得关注的项目.它使用Cecil进行反射,而Cecil.Decompiler进行反编译.但Monoflector在两个库的顶部层叠了一个UI,这可以让您非常了解如何使用API​​.

Monoflector也是反射器的一个不错的替代品.它允许您浏览类型并反编译方法,这是人们使用Reflector的99%.边缘非常粗糙,但我认为这会很快改变.


And*_*are 5

好吧,Reflector本身是一个.NET程序集,所以你可以在Reflector中打开Reflector.exe来检查它是如何构建的.

  • 不,你不能.反射器被混淆了. (14认同)
  • 你无法在Reflector中打开Reflector?我只是这样做 - 混淆只会伤害IL的可读性,因为标识符和类型名称被破坏了,但这并不意味着你不能解开它. (14认同)
  • 安德鲁 - 在一个洞里,停止挖掘...... (13认同)
  • @Andrew Hare:如果你试图通过反射器中的反射器来查看方法实现,你会看到"这是混淆的"并且它不会显示它所以不,你不能使用Reflector.此外,对于OP对OP的要求迂腐是一场失败的战斗. (7认同)
  • 嗯......我有版本5.1.6.0,我可以看到源很好 - 只有标识符名称被混淆.不完美是的,但我现在正在查看Reflector的C#源代码.:) (2认同)