Reflector的开源替代品?[关闭]


419

只是问问是否有人知道RedGate的Reflector的开源替代品?我对检查类似于Reflector的工具的实际工作方式很感兴趣。

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

摘要-2011年5月11日更新

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

  1. 通用编译器基础结构(CCI)
  2. 单声道塞西尔
  3. ILSpy
  4. dnSpyILSpy的 fork,项目比原始项目更活跃)
  5. Dotnet IL编辑器(DILE)
  6. IL视图
  7. Monoflector(自2011年4月起不再有效

以下资源也可能是您感兴趣的:

  • TypeView.cs
  • Jason Haley关于拆解.NET的说明
  • Adrian Bank在最近的博客文章中总结了许多Reflector替代方案,包括以下未提及的几种选择。
  • 马克·利希滕贝格(Mark Lichtenberg)的详细博客文章,将几种开源替代方案(使用MonoDevelop的DILE,ILSpy和Mono Cecil)与Reflector进行了比较。

2
仅供参考,现在有一个无限期
9:49


2
@Matt,如果您检查日期,则在“比.NET Reflector更好的东西”之前问过此问题?题。另外,这个问题专门要求开源替代方案。
MagicAndi 2012年

Answers:


31

我知道2个选项。

  • CCI
  • 单声道塞西尔

这些虽然不会给你C#。


勒皮,谢谢。我接受这个作为答案,即使这是您的答案和Jason Haley的选择之间的艰难选择。
MagicAndi 2010年

CCI没有GUI前端(据我所知)。但是在codeplex的当前源代码中,有一个非常简单的API可以将反编译的AST转换为C#fyi。
justin.m.chase 2011年

2
Mono.Cecil只是一个图书馆,对不对?
罗伯特·杰普森

175

2011年12月13日更新

可以使用以下开源工具:


1
几年前,我使用了dile-它是一个出色的反汇编程序和调试器-我在使用它时强烈建议使用它。我已经有一段时间没有使用它了。
杰森·海莉

8
当前版本的ILSpy(ILSpy v1.0.0.440,20010228)正常运行。我可以浏览没有PDB文件的C#库的方法,属性甚至源代码。
mathijsuitmegen 2011年

6
刚开始使用ILSpy。到目前为止非常满意。完美的replacemenet。谢谢SharpDevelop!
codemonkey

1
刚接触到此工具,非常高兴看到.NET开发人员的工具带中有钉书钉的替代品。有些反编译有点怪异(字符串连接显示为IL所看到的,但不一定像编写代码时那样-并不是一件坏事),但总体而言,这是一个很好的工具!
CodeMonkey1313

5
我刚试过ILSpy,效果很好!它甚至可以重建lambda表达式和迭代器(“收益回报”)方法……哇!我很佩服!
2011年

38

另一个替代方法是dotPeek。JetBrains宣布它是一个免费工具。与Resharper配合使用时,它可能会具有更多功能,但即使单独使用,它也可以很好地工作。

用户体验更像是MSVS,而不是独立的反汇编程序。我比在Reflector中更喜欢阅读代码。Ctrl + T导航也更适合我。仅将树与代码窗格同步会更好。

总而言之,它仍在开发中,但已经非常有用。


2
很棒的工具,但不是开源的。但是它是免费的,这可能意味着它从任何开放源代码的同等版本中抢了风头。
德鲁·诺阿克斯

Ferdinand,-1为封闭源代码工具。您应该尝试将其添加到Reflector的链接问题之一中。
MagicAndi 2011年

3
我将在这里留下我的答案,以使信息更加完整。该线程最容易通过google找到,这里其他工具的列表也是最完整的。(并不是所有人都是OSS btw。)
Ferdinand Prantl

费迪南德,我一直否决了所有给出封闭源解决方案的答案,反复更新问题文本以指定我仅对OSS感兴趣,并确保问题摘要中的所有解决方案都是开源的。在这个问题线程中,只有另一个封闭源解决方案,我也对此表示反对。在Redgate决定在今年早些时候退款之前,曾问过这个问题,并特别要求开源替代方案。我还需要做什么?
MagicAndi 2011年

9
@MagicAndi停止抱怨将是一个开始。我在寻找免费替代品时从Google找到了这个主题。我不在乎它是否是开源的。@Ferdinand感谢您的dotPeek链接,看起来很有希望。
温斯顿·史密斯,

15

Telerik今天发布了他们自己的反编译工具Beta的JustDecompile。封闭的源代码,但是免费,看起来很有希望。


雷,很抱歉,但是为了与GrayWolf答案的方法保持一致,我将不得不对此答案投反对票。这个问题专门针对开源替代方案。.NET社区依靠封闭源解决方案让自己陷入困境。无论将来由谁提供工具,我们都应该避免这种情况。-1
MagicAndi

Ray,原来我的Kaliro建议也是封闭源代码实用程序。请随时回报不赞成票-我应得的!不幸的是,您不能对自己的答案进行投票。
MagicAndi 2011年

1
@MagicAndi-删除答案要比不赞成投票要容易。如果您不觉得它增加了任何价值,那么您就有能力使“走了”。
jpierson 2011年

1
不要删除/拒绝投票这个答案。关于免费替代方案的其他SO问题正在由主持人关闭,作为该问题的“重复项”!因此该信息值得在这里。
亚历克斯

JustDecompile是一个令人毛骨悚然的bug应用程序,它始终崩溃,并在应有的代码处显示许多异常。除此之外,它非常慢。.NET Reflector比那个废话要好得多!
Elmue 2015年

12

ILSpy很棒!

据我所知,它完成了Reflector所做的所有工作,并且看起来也一样。


10

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

如果您想了解IL反汇编程序的工作原理,我建议您看一下上面提到的三件事:Dile,CCI和Mono都是这些东西的好来源。

我也强烈建议您也获得Ecma 335规格和Serge Lidin的书。


该链接似乎
断开

是的,很抱歉,我去年将该网站关闭了,还没有替换。
杰森·海利

8

我使用Reflector的主要原因(并且,我认为,大多数人使用它的主要原因)是为了对其进行反编译:它可以将方法的IL转换回源代码。

从这个角度来看Monoflector将是值得关注的项目。它使用进行反射的Cecil和进行反编译的Cecil.Decompiler。但是Monoflector在这两个库的顶部都提供了一个UI,这应该使您对如何使用API​​有了一个很好的了解。

Monoflector还是完全可以代替Reflector的一个不错的选择。它使您可以浏览类型并反编译方法,这是人们使用Reflector的99%。它的边缘非常粗糙,但是我认为这会很快改变。


5

好吧,Reflector本身是一个.NET程序集,因此您可以在Reflector中打开Reflector.exe来检查其构建方式。


14
不,你不能。反射器模糊不清。
杰夫·耶茨

14
您无法在Reflector中打开Reflector吗?我只是这样做了-混淆只是损害了IL的可读性,因为标识符和类型名被弄乱了,但这并不意味着您无法消除它。
Andrew Hare 2010年

13
安德鲁-
陷入困境

2
嗯...我的版本是5.1.6.0,我可以看到源代码很好-仅混淆了标识符名称。并不完美,但是,我现在正在查看Reflector的C#源代码。:)
Andrew Hare 2010年

7
@Andrew Hare:如果尝试通过反射器中的反射器查看方法实现,则会看到“这是模糊的”,并且不会显示出来,所以不能,您不能使用Reflector。此外,对OP想要与OP达成一致的想法是一场失败的战斗。
杰夫·耶茨

3

我目前正在开发一个名为Assembly Analyzer的开源反汇编程序/反编译器。它生成方法的源代码,显示程序集元数据和资源,并允许您遍历依赖关系。

该项目托管在CodePlex => http://asmanalyzer.codeplex.com/上


1

Reflector工具使用反射。  -显然这是不正确的。

您要求做两件事-显示反射器功能的代码,以及反射器的替代方法。

这是一个示例,与Reflector的工作相比已大大简化,但它显示了反射技术: TypeView.cs

我没有建议更换开源Reflector。


嗯,如果使用“ Reflection”来引用.NET框架的“ System.Reflection”,我将对此表示怀疑。
Christian.K,2010年

3
@ Christian.K:不,System.Reflection在框架中不使用Reflector ,Roeder在很早的时候就说过,因为程序集的加载和卸载存在问题。
casperOne'2

@casperOne,我不完全知道.NET Reflector在内部的工作方式,但是System.Reflection自.NET Reflector成立以来,名称空间已得到扩展。它现在支持在只反射上下文中加载和卸载组件:stackoverflow.com/questions/225330/...
德鲁诺克斯

1
@德鲁·诺阿克斯(Drew Noakes):的确如此,但罗德(据我所知)从未说过,一旦做出更改,他就搬回了反思。
casperOne 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.