【问题标题】:Scanning DLL dependencies from a C# executable从 C# 可执行文件扫描 DLL 依赖项
【发布时间】:2009-12-17 01:54:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# dll assemblies


    【解决方案1】:

    .NET 程序集的格式由标准ECMA-335 "Common Language Infrastructure (CLI)" 定义,特别是“第二部分:元数据定义和语义”,可免费下载。您可以使用它为它们编写自己的 Java 解析器来提取引用。

    【讨论】:

    • 有用,谢谢。特别是参考正确的规范。
    【解决方案2】:

    您可以使用pe-file-reader 库(或从中获取灵感):

    这个库读取 .net 程序集和 .net 模块文件(可移植的可执行文件 文件;托管的可执行文件)。 。网 存储模块和汇编文件 根据ECMA 335 标准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2021-01-29
      • 1970-01-01
      • 2015-05-24
      • 2014-10-06
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多