【问题标题】:Get DLL or EXE dependencies, using NDepend使用 NDepend 获取 DLL 或 EXE 依赖项
【发布时间】:2013-08-19 19:28:19
【问题描述】:

我需要获取 EXE 或 DLL 文件中使用的引用程序集的列表。 我一直在寻找 NDepend 作为通过其控制台执行此操作的选项,因此我可以为此提供编程解决方案。

据我所知,NDepend 从 Visual Studio 项目中读取依赖项,但我不知道是否可以告诉 NDepend 分析 DLL 并读取其引用的程序集。

有人知道是否可以使用 NDepend 来实现吗?如果没有,我可以使用其他工具或机制来实现此目的吗?

谢谢,如果您需要任何额外的细节,请告诉我。

【问题讨论】:

  • ildasm.exe 会为你做这件事。
  • 你的意思是编程吗?

标签: c# dependencies ndepend


【解决方案1】:

【讨论】:

  • 是的,我已经尝试过使用反射,但效果并不好。
  • 其实我做不到。我不允许这样做。该进程在当前运行的应用程序的 bin 文件夹中而不是在加载的 DLL 的参考程序集路径中查找 DLL。它可以很好地加载 .Net 引用的程序集。
  • 很抱歉,我不完全理解您要做什么。你能再解释一下吗?您是否区分托管引用和非托管引用?
  • 是的,这不必与非托管引用作斗争。我有一个可以加载 DLL 或 EXE 文件的应用程序,我需要该应用程序获取引用的程序集。我已经尝试过使用反射,但它不能正常工作,因为当它到达应用程序引用时,它会尝试从当前运行的应用程序 bin 文件夹加载 DLL,而不是从正确的程序集路径加载程序集。
  • 我调整了答案。 Dependency Walker 始终是我最后的手段。
【解决方案2】:

无论您需要dependency graphdependency matrix 还是需要这些程序集依赖项以编程方式 NDepend 都可以为您完成。

所以我可以为此提供编程解决方案。

要以编程方式获取程序集依赖项,您需要使用 NDepend.API。这是NDepend.API getting started 文档。在内存中获得 ICodeBase 对象后,以下是如何通过 C# LINQ 查询获取程序集依赖项的方法,例如:

from a in codeBase.Application.Assemblies 
where a.AssembliesUsed.Count() >= 0 
orderby a.AssembliesUsed.Count() descending 
select new { 
   a,
   a.AssembliesUsed,
   a.AssembliesUsingMe
}

请注意,a.AssembliesUsed 是一个包含应用程序和第三方程序集的 IEnumerableIAssembly>。要将 a.AssembliesUsed 限制为仅使用的应用程序程序集,您可以重写它 assembliesUsed = a.AssembliesUsed.Where(a1 => !a1.IsThirdParty)

此外,由于 NDepend API 可以从即时编译和执行的 C# LINQ 查询中使用,因此您可以在 Visual Studio 的 NDepend 查询编辑器中运行之前的 C# LINQ 查询,并以方便的格式获取程序集依赖项方式:

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多