请问有哪些好的基于.NET的桌面应用程序可以用Reflector来查看?任何应用程序示例都将不胜感激。
我暂时想不到什么,但你可能想获取一些开源的东西并编译它。这样,如果 MSIL 令人困惑,你就有源代码可以参考。
我发现 Code Project 有很多可用于各种不同目的的好样例程序。虽然我主要用它来制作 C++ 应用程序,但我还没有研究 .NET 程序。我的猜测是它们也同样好。
我最常使用它的情况是当我对一段代码在文档中没有涉及到的情况下想要了解它的作用。例如,我曾经在尝试为旧版ASP.NET WebForms模型创建复杂的Web控件时进行了大量反射。整个调用堆栈非常复杂,而文档也不是很友好...
我现在使用Reflector的#1原因可能是查看一个调用可能抛出哪些异常。.net文档最大的缺陷之一是它通常只告诉你当前方法在异常方面会抛出什么。例如,如果方法A可能会抛出异常1,并且方法A调用可能会抛出异常2的方法B,那么在方法A的文档中只会告诉你关于异常1的信息。有时你甚至连ArgumentNullExceptions都不会得到。
使用反射器的最酷之处之一是我想创建DynamicMethod时。 DynamicMethods允许您通过IL调用构造方法;它介于反射(慢)和在内存中编译自己的程序集(执行速度快但启动慢)之间。 我想创建一个小类,检查测试期间是否触发了事件... 无论如何,我不知道如何编写IL代码,所以我创建了一个包含完全符合我想要在DynamicMethod中执行的操作的类的程序集,将其编译,然后在Reflector中查看IL。 那本身就是一项令人满意的练习,我可能会使用相同的技术来进行更复杂的语句解析/编译...在开发过程中,我使用反射器来检查编译器如何将C#转换为IL,因为我经常使用Reflection.Emit和Expression等工具。我还使用它快速查看我的代码;当你有一个大的dll库时,我发现将dll+xml从构建服务器拖到反射器中比加载每个项目到VS中更快,特别是如果我不确定代码的位置...
您还可以使用像snippy这样的插件作为代码片段的测试平台。
由于我们的应用程序使用了几个许可组件,我使用 Reflector 确切地查看嵌入到可执行文件中的许可证。根据我通过 Reflector 预期看到的内容,我还编写了单元测试以确保所需的许可证存在,即使在构建服务器上构建时也是如此。
我认为它主要适用于.NET核心和补充程序集。例如,如果你想知道Parallel.Invoke
如何工作,只需打开Reflector并变得更加聪明。但要注意,mscorlib
有很多P/invoke引用,由于明显的原因,您将无法反汇编。
我最近倾向于使用Reflector查找类所使用的所有接口。有时分析类在命名空间的其他部分中的使用位置以确定如何实现它也很有帮助。
如果源代码不可用,观看Reflector中的代码可能会有所帮助,但绝大多数情况下最好找到代码本身,因为这至少能让您了解代码实际上是如何编写的。因为Reflector正在查看IL,所以该代码被“优化”为计算机,而不是人类可读性。此外,如果开发人员花时间添加任何注释到代码中(我知道这很少见,但确实发生了),Reflector将不会拥有它们,因此无法从其中获取任何洞察力。