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

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

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

摘要 - 2011 年 5 月 11 日更新

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

  1. Common Compiler Infrastructure (CCI)
  2. Mono Cecil
  3. ILSpy
  4. dnSpy(ILSpy 的分支,项目看起来比原始项目更活跃)
  5. Dotnet IL Editor (DILE)
  6. IL.View
  7. 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。

【问题讨论】:

标签: .net reflection open-source 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 早期以来已经扩展。它现在支持在仅反射上下文中加载和卸载程序集:stackoverflow.com/questions/225330/…
        • @Drew Noakes:这是事实,但 Roeder 从未说过(据我所知)一旦做出此更改,他就已移回 Reflection。
        猜你喜欢
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2013-06-21
        • 1970-01-01
        • 2017-08-08
        相关资源
        最近更新 更多