C# 如何从.Net DLL获取公共导出列表?
我可以使用“dumpbin”和“dll export”等工具查看标准win32 dll(如Windows\SYSTEM32\GDI32.dll)的公共入口点(“导出”)。但是当我在.Net DLL上使用这些相同的工具时,我看到的是 我有一个C#/.Net DLL,它提供了控制工业过程的入口点,我想对照我们的文档检查它的公共入口点,以确保公共文档的完整性。什么工具显示.Net DLL的公共入口点C# 如何从.Net DLL获取公共导出列表?,c#,.net,dll,C#,.net,Dll,我可以使用“dumpbin”和“dll export”等工具查看标准win32 dll(如Windows\SYSTEM32\GDI32.dll)的公共入口点(“导出”)。但是当我在.Net DLL上使用这些相同的工具时,我看到的是 我有一个C#/.Net DLL,它提供了控制工业过程的入口点,我想对照我们的文档检查它的公共入口点,以确保公共文档的完整性。什么工具显示.Net DLL的公共入口点 我尝试过Jetbrains DotPeek,它将我们的DLL完全反编译成C#源代码,但这太过分了,因为
我尝试过Jetbrains DotPeek,它将我们的DLL完全反编译成C#源代码,但这太过分了,因为它显示了所有内容,并且似乎没有一个只报告公共入口点的摘要模式 仅作为一个起点,如何从当前程序集中列出所有公共类型并从中列出所有公共方法:
Assembly assembly = Assembly.GetExecutingAssembly();
var exports =
assembly.GetExportedTypes()
.SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Public)
.Select(member => new
{
type.FullName,
Member = member.ToString()
}))
.ToList();
但这忽略了嵌套类和属性,并且可能应该以几种方式进行扩展以满足问题的需要。我假设“入口点”是指“公共类和方法”
使用visual Studio对象浏览器怎么样
所有具有公共方法和属性的公共类和接口都可以看作.NET程序集的“公共导出”。因此,您可以使用一些反编译器手动检查它(就像您已经做的那样),或者尝试使用反射编写代码以列出所有此类方法。托管程序集不使用非托管导出。要做到这一点,有很多方法,明智的方法是编写单元测试。不确定单元测试如何解决这个问题。我们的目标是确保当用户拥有我们的DLL时,所有通过DLL公开可见的内容都被记录下来。显然,我们可以通过研究源代码或程序集来推测什么是公开可见的,但这只是一种猜测。了解DLL公开的内容是一个经验测试,或者至少我们是这样使用旧的Win32 DLL的。程序集和源代码告诉我们什么应该是公共可见的,我希望DLL能够提供一个双重检查,以验证什么实际上是公共可见的。这是因为.NET是基于组件的编程。不需要对导出defs和导出代码进行双重检查。每个公共组件都是可用的,元数据(可通过反射访问)描述了它们。客户端引用程序集,并通过元数据知道可用的内容。由于旧的Win32 DLL在dumpbin之类的工具中查看导出,因此在编译和构建环境中检查源代码和其他文件时,会提供一个经验性的双重检查。正如我在有问题的评论中所说,没有“双重检查”的地方在基于组件编程的情况下的想法。
Assembly assembly = Assembly.GetExecutingAssembly();
var exports =
assembly.GetExportedTypes()
.SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Public)
.Select(member => new
{
type.FullName,
Member = member.ToString()
}))
.ToList();