有时当我做一个小项目时,我不够小心,不小心添加了一个我不知道的DLL依赖项。当我将这个程序发送给朋友或其他人时,“它不工作”,因为“一些DLL”丢失了。这当然是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到。

是否有一种方法来扫描可执行文件的DLL依赖项或在“干净”的DLL自由环境中执行程序进行测试,以防止这些糟糕的情况?


当前回答

找出要使用的程序集的完整文件路径 按下开始按钮,输入“dev”。启动名为“VS 2017开发者命令提示符”的程序 在打开的窗口中,键入dumpbin / dependencies [path],其中[path]是在步骤1中计算出的路径 按回车键

嘭,你得到了你的依赖信息。窗口应该是这样的:

VS 2019更新:在你的VS安装中需要这个包:

其他回答

从Visual Studio工具(VC\bin文件夹)可以帮助:

dumpbin /dependents your_dll_file.dll

最安全的事情是有一些干净的虚拟机,你可以在上面测试你的程序。在您希望测试的每个版本上,将VM恢复到其初始干净值。然后使用它的设置安装你的程序,看看它是否工作。

Dll问题有不同的面貌。如果你使用Visual Studio并动态链接到CRT,你必须分发CRT dll。更新你的VS,你必须分发另一个版本的CRT。仅仅检查依赖关系是不够的,因为你可能会错过这些。在我看来,在一台干净的机器上完全安装是唯一安全的解决方案。

如果您不想设置一个完整的测试环境并使用Windows 7,您可以使用XP-Mode作为初始的清理机器,并使用XP-More来复制VM。

有个程序叫"依赖" 如果你安装了cygwin,没有什么比ldd file.exe更简单的了

找出要使用的程序集的完整文件路径 按下开始按钮,输入“dev”。启动名为“VS 2017开发者命令提示符”的程序 在打开的窗口中,键入dumpbin / dependencies [path],其中[path]是在步骤1中计算出的路径 按回车键

嘭,你得到了你的依赖信息。窗口应该是这样的:

VS 2019更新:在你的VS安装中需要这个包:

在您的开发机器上,您可以执行该程序并运行Sysinternals Process Explorer。在下面的窗格中,它将显示加载的dll和它们的当前路径,这很方便,原因有很多。如果你正在执行你的部署包,它会显示哪些dll被引用在错误的路径(即没有正确打包)。

目前,我们公司使用Visual Studio Installer项目来遍历依赖树,并将其输出为程序的松散文件。在VS2013中,这现在是一个扩展:https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d。然后,我们将这些松散的文件打包到一个更全面的安装程序中,但至少该安装程序将所有的dot net依赖项放在一个位置,并在东西丢失时警告你。