确定DLL在C#程序中使用的文件列表

本文关键字:文件 列表 DLL 程序 确定 | 更新日期: 2023-09-27 17:58:46

我将尝试描述我的问题。。。例如,我使用在我的项目(C#)中加载"General.dll"

//load "General.dll"
dllHandle = LoadLibraryEx(generalPath, IntPtr.Zero, LOAD_WITH_ALTERED_SEARCH_PATH);
[DllImport("kernel32.dll")]         
private static extern IntPtr LoadLibraryEx(string dllToLoad, IntPtr reserved, uint flags);
[DllImport("General.dll")] ...

如果我使用一个从"General.dll"需要"Gif.dll"的方法,我需要将"Gif.dll"复制到带有"General.dll"的文件夹(如果我不使用这种方法,我不能复制"Gif..dll")。

如果我使用"General.dll"中使用"荷兰语"语言的方法,我需要将"Dutch.amd"复制到带有"General.dll"的文件夹中。

例如,我写了一些代码,它使用了与"General.dll"不同的方法。如何确定我可以删除带有"General.dll"的文件夹中的哪些文件?

我可以使用Visual Studio执行此操作吗?例如,在VS中编译我的代码,找出运行时使用了哪些文件,然后只复制这些文件。

谢谢!

确定DLL在C#程序中使用的文件列表

通常,任何可重新分发的组件都会包括部署指南,其中规定了必须部署的文件、必须部署到的位置以及必须进行的任何注册。强烈建议您查看general.dll的文档(如果存在)。

如果general.dll是您自己的工作,那么查看代码以查找所有引用的文件和程序集。如果它太大,一个不错的启发式方法可能是在使用组件监视文件和注册表访问的同时运行Process Monitor。许多安装程序创作工具使用类似的技术来检测依赖关系。

如果您没有相关组件的文档或源代码,则可以使用dumpbin /dependents、Dependency Walker/depends.exe,甚至仅使用strings来查找声明的导入。但是,请注意,此列表不是独占的,可能会忽略有条件加载的关键文件(仅在某些机器类型、区域性或其他类型上)。

也许DependencyWalker就是您想要的工具。只要用这个工具打开一个EXE或DLL文件,它就会建立一个很好的DLL依赖树。它还支持在运行时检测动态依赖关系的分析,并提供许多其他功能。