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

时间:2014-04-17 03:50:09

标签: c# .net visual-studio-2010 dll

我将尝试描述我的问题...我在我的项目(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中编译我的代码,找出在运行时使用的文件,并仅复制这些文件。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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