【发布时间】:2014-01-22 21:40:11
【问题描述】:
我可以使用“dumpbin”和“dll export”之类的工具来查看 Windows\SYSTEM32\GDI32.dll 等标准 win32 DLL 的公共入口点(“exports”)。但是当我在 .Net DLL 上使用这些相同的工具时,我看到的只是
2000 .reloc 2000 .rsrc 48000 .text
我有一个 C#/.Net DLL,它提供入口点来控制工业流程,我想根据我们的文档检查它的公共入口点,以确保公共文档的完整性。什么工具显示 .Net DLL 的公共入口点?
我尝试过 Jetbrains DotPeek,它可以将我们的 DLL 完全反编译为 C# 源代码,但这太过分了,因为它显示了所有内容,并且似乎没有摘要模式,它只报告公共入口点。
【问题讨论】:
-
所有具有公共方法和属性的公共类和接口都可以看作是.NET程序集的“公共出口”。因此,您可以使用一些反编译器手动查看它(就像您已经做过的那样)或尝试使用反射编写代码来列出所有此类方法。
-
托管程序集不使用非托管导出。解决这个问题的方法很多,最明智的方法是编写单元测试。
-
不确定单元测试如何解决这个问题。我们的目标是确保当用户拥有我们的 DLL 时,通过 DLL 公开可见的所有内容都被记录在案。显然,我们可以通过研究源代码或程序集来推测公开可见的内容,但这只是一个推测。知道 DLL 暴露了什么是经验测试,或者至少我们是这样使用旧的 Win32 DLL 的。程序集和源代码告诉我们什么应该公开可见,我希望 DLL 可以对实际经验上的公开可见提供双重检查。
-
这是因为 .NET 是基于组件的编程。无需仔细检查导出 defs 与导出代码。每个公共组件都是可用的,元数据(可通过反射访问)描述它们。客户端引用程序集并通过元数据知道可用的内容。