从C#可执行文件扫描DLL依赖项

Ben*_*enj 2 c# dll assemblies

我正在开发一个并行构建工具,它可以构建各种类型的windows程序(在很多其他东西中).我们的工具的一部分让我们的用户更轻松的生活是EXE和DLL文件的自动依赖性扫描.这意味着,如果用户说他们想要运行"bob.exe",那么当"bob.exe"被分发到构建网络中的其他节点时,他们不必担心依赖性问题.这是因为我们扫描"bob.exe"找出它需要的DLL并随之发送它们.

总的来说这很有效,除非EXE以编程方式加载DLL.然后必须将依赖项硬编码到用户make文件中.我们最近开始遇到的一个问题是如何处理C#DLL/EXE.这些似乎包含DLL引用,它们不是PE格式的一部分.我假设引用在某种C#容器中,并且C#运行时只是在C#运行时启动时以编程方式加载它们.

谁能告诉我在二进制级别扫描这些引用的最佳方法是什么?我的构建工具是多平台的,因此我的PE扫描程序用Java编写.因此,我不能依赖任何.NET库.我的PE扫描程序已经可以解析PE文件中的所有部分,并且我习惯于解析包含C++应用程序的并排程序集信息的部分.我只需要一些关于在C#应用程序中做什么的指示......

Pav*_*aev 5

.NET程序集的格式由标准ECMA-335"公共语言基础结构(CLI)"定义,特别是"分区II:元数据定义和语义",可免费下载.您可以使用它为它们编写自己的Java解析器来提取引用.