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

我将尝试描述我的问题…我在我的项目(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”语言的方法,我需要将“Dutch.amd”复制到包含“General.dll”的文件夹。

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

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

谢谢!

通常,任何可再发行组件都将包含部署指南,其中说明必须部署哪些文件,必须部署哪些文件以及必须进行的任何注册。 我强烈建议您查看general.dll的文档(如果存在)。

如果general.dll是您自己的工作,那么请查看代码以查找所有引用的文件和程序集。 如果它过于庞大,那么在使用组件监视文件和注册表访问时,可能会运行Process Monitor 。 许多安装程序创作工具使用类似的技术来检测依赖项。

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

也许DependencyWalker是您正在寻找的工具。 只需使用此工具打开一个EXE或DLL文件,它就可以为所需的DLL构建一个很好的依赖树。 它还支持分析以在运行时检测动态依赖性并提供许多其他function。