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

Posted

技术标签:

【中文标题】Reflector 的开源替代品? [关闭]【英文标题】:Open Source Alternatives to Reflector? [closed] 【发布时间】:2011-01-26 10:14:30 【问题描述】:

只是想问是否有人知道 RedGate 的Reflector 的开源替代方案?我有兴趣查看类似于 Reflector 的工具实际上是如何工作的。

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

Something Better than .NET Reflector?

摘要 - 2011 年 5 月 11 日更新

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

    Common Compiler Infrastructure (CCI) Mono Cecil ILSpy dnSpy(ILSpy 的分支,项目看起来比原始项目更活跃) Dotnet IL Editor (DILE) IL.View Monoflector(no longer active 截至 2011 年 4 月)

以下资源也可能感兴趣:

TypeView.cs Jason Haley 在disassembling .NET 上的笔记 Adrian Bank's 最近的blog post 总结了一些反射器的替代品,包括下面没有提到的几个选项。 Mark Lichtenberg 详细的blog post 比较了几种开源替代方案(DILE、ILSpy 和使用 MonoDevelop 的 Mono Cecil)与 Reflector。

【问题讨论】:

仅供参考,现在有一个 v6 版本将无限期免费:eon.businesswire.com/news/eon/20110426007021/en/.NET-Reflector/… Something Better than .NET Reflector?的可能重复 @Matt,如果你检查日期,这个问题是在比 .NET Reflector 更好的东西之前被问到的?题。此外,这个问题专门要求开源替代品。 【参考方案1】:

2011 年 12 月 13 日更新

以下开源工具可用:

ILSpy 来自 SharpDevelop 团队。感谢 Scott Hanselman's tweet 突出显示该工具。 Dotnet IL Editor(反汇编程序) IL.View - 在 Silverlight 4 中作为浏览器外 Silverlight 应用程序编写的 .NET Reflector 替代方案。有关详细信息,请参阅此 blog 帖子。

【讨论】:

几年前我用过dile——它是一个很棒的反汇编器和调试器——我在使用它时强烈推荐它。不过我已经有一段时间没有使用它了。 ILSpy 的当前版本(ILSpy v1.0.0.440, 20010228)的工作方式与我预期的一样。我可以在没有 PDB 文件的情况下浏览 C# 库的方法、属性甚至源代码。 刚开始使用 ILSpy。到目前为止非常满意。完美的替代品。谢谢SharpDevelop! 刚刚遇到这个工具,很高兴看到 .NET 开发人员工具带中的主食替代品。一些反编译有点奇怪(字符串连接显示为 IL 会看到的,但不一定是代码编写的 - 不是坏事),但总的来说,一个很棒的工具! 我刚试过 ILSpy,效果很好!它甚至可以重构 lambda 表达式和迭代器(“yield return”)方法……哇!我印象深刻!【参考方案2】:

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

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

总而言之,它仍在开发中,但已经很好用了。

【讨论】:

很棒的工具,但不是开源的。然而,它是免费的,这可能意味着它抢走了任何开源同等产品的关注。 Ferdinand,-1 表示封闭源代码工具。您应该尝试将此添加到 Reflector 的链接问题之一中。 我在这里留下我的答案,以使信息更完整。这个线程是谷歌最容易找到的,这里的其他工具列表也是最完整的。 (顺便说一句,并非所有这些都是 OSS。) Ferdinand,我一直对所有给出封闭源解决方案的答案投反对票,反复更新问题文本以指定我只对 OSS 感兴趣,并确保问题摘要中的所有解决方案都是开放的资源。在这个问题线程中只有一个其他闭源解决方案,我也对此表示反对。这个问题是在今年早些时候 Redgate 决定退还之前提出的,并特别要求开源替代品。我还需要做什么? @MagicAndi 停止抱怨将是一个开始。我在寻找免费替代品时从 Google 找到了这个帖子。我不在乎它是否是开源的。 @Ferdinand 感谢 dotPeek 链接,看起来很有希望。【参考方案3】:

我知道的 2 个选项。

CCI 单音塞西尔

这些不会给你 C#。

【讨论】:

莱皮,谢谢。我接受这个作为答案,尽管在你的答案和 Jason Haley 的答案之间做出了艰难的选择。 CCI 没有 GUI 前端(我知道)。但是在 codeplex 的当前源代码中,有一个非常简单的 API 可以将反编译的 AST 转换为 C#,仅供参考。 Mono.Cecil 只是一个库,对吧?【参考方案4】:

Telerik 今天发布了他们自己的反编译工具JustDecompile 的测试版。封闭源代码,但免费且看起来很有前途。

【讨论】:

Ray,抱歉,但为了与 GrayWolf 答案的方法保持一致,我将不得不对这个答案投反对票。这个问题专门针对开源替代品。 .NET 社区依靠封闭源代码解决方案让自己陷入了困境。无论谁提供该工具,我们都应该在未来避免这种情况。 -1 Ray,原来我的 Kaliro 建议也是一个闭源实用程序。请随时回应反对票 - 我应得的!不幸的是,您不能对自己的答案进行投票,无论是赞成还是反对。 @MagicAndi - 删除您的答案比否决它更容易。如果你觉得它没有增加任何价值,那么你就有能力“消失”。 不要删除/否决这个答案。其他关于免费替代品的 SO 问题正在被版主关闭为这个问题的“重复”!所以信息值得在这里。 JustDecompile 是一个可耻的错误应用程序,它总是崩溃并且在代码应该存在的地方显示很多异常。除此之外它非常慢。 .NET Reflector 比那些废话好多了!【参考方案5】:

ILSpy 效果很好!

据我所知,它完成了 Reflector 所做的一切,而且看起来也一样。

【讨论】:

【参考方案6】:

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

如果您想了解 IL 反汇编程序的工作原理,我建议您查看上述三项中的任何一项:Dile、CCI 和 Mono 都是这些东西的好来源。

我还强烈建议您购买 Ecma 335 规范和 Serge Lidin 的书。

【讨论】:

这个链接好像失效了 是的,很抱歉我去年关闭了该网站,但没有更换它。【参考方案7】:

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

因此,Monoflector 将是值得关注的项目。它使用执行反射的 Cecil 和执行反编译的 Cecil.Decompiler。但是 Monofector 在这两个库之上添加了一个 UI,这应该可以让您很好地了解如何使用 API。

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

【讨论】:

【参考方案8】:

嗯,Reflector 本身是一个 .NET 程序集,因此您可以在 Reflector 中打开 Reflector.exe 以查看它是如何构建的。

【讨论】:

不,你不能。反射器被混淆了。 Reflector中打不开Reflector?我只是这样做了——混淆只会损害 IL 的可读性,因为标识符和类型名称被破坏了,但这并不意味着你不能分解它。 安德鲁 - 在洞里时,停止挖掘...... 嗯...我有版本 5.1.6.0,我可以很好地看到源代码 - 只有标识符名称被混淆了。不完美是的,但我现在正在查看 Reflector 的 C# 源代码。 :) @Andrew Hare:如果您尝试通过反射器中的反射器查看方法实现,您将看到“这是混淆的”并且它不会显示它,所以不,您不能使用反射器。此外,对 OP 对 OP 的要求是迂腐的,这是一场失败的战斗。【参考方案9】:

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

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

【讨论】:

【参考方案10】:

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

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

这是一个示例,与 Reflector 所做的相比非常简化,但它展示了反射技术: TypeView.cs

我没有关于替换开源反射器的建议。

【讨论】:

嗯,如果用“Reflection”指代.NET框架的“System.Reflection”,我会非常怀疑。 @Christian.K:不,Reflector 没有在框架中使用System.Reflection,Roeder 很早就说过,因为程序集加载和卸载存在问题。 @casperOne,我不知道 .NET Reflector 在内部是如何工作的,但 System.Reflection 命名空间自 .NET Reflector 早期以来已经扩展。它现在支持在仅反射上下文中加载和卸载程序集:***.com/questions/225330/… @Drew Noakes:这是事实,但 Roeder 从未说过(据我所知)一旦做出此更改,他就已移回 Reflection。

以上是关于Reflector 的开源替代品? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

mobiscroll的开源替代品[关闭]

数据挖掘开源软件替代品[关闭]

什么是用于 SMS 网关的 Kannel 的良好开源替代品? [关闭]

报告(免费||开源)Winforms中Crystal Reports的替代品[关闭]

AddThis AddToAny、ShareThis 等用于社交书签的开源替代品 [关闭]

oracle coherence 的开源替代方案? [关闭]