orl*_*rlp 144 windows dll dependencies
有时当我做一个小项目时,我不够小心,并且意外地为我不知道的DLL添加依赖项.当我将此程序发送给朋友或其他人时"它不起作用",因为"某些DLL"丢失了.这是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到.
是否有程序/脚本可以扫描可执行文件的DLL依赖项或在"干净的"无DLL环境中执行程序以进行测试以防止这些oops情况?
Jef*_*Son 187
dumpbin
从Visual Studio工具(VC\bin文件夹)可以在这里帮助:
dumpbin /dependents your_dll_file.dll
Run Code Online (Sandbox Code Playgroud)
Luc*_*ore 85
尝试依赖walker:http://www.dependencywalker.com/
tro*_*ane 41
我可以为Linux粉丝推荐有趣的解决方案.在我探索了这个解决方案之后,我已经从DependencyWalker切换到了这个.
您可以使用自己喜欢ldd
过Windows相关的exe
,dll
.
要做到这一点,你需要在Windows上安装Cygwin(基本安装,不需要额外的软件包)然后启动Cygwin Terminal
.现在您可以运行您喜欢的Linux命令,包括:
$ ldd your_dll_file.dll
Run Code Online (Sandbox Code Playgroud)
UPD:您也ldd
可以通过Windows上的git bash终端使用.如果你已经安装了git,则无需安装cygwin.
Gab*_*ers 23
尝试Dependency它被描述为“开源现代 Dependency Walker”。
\n它有一个 GUI,但也可以通过命令行使用可选的 JSON 输出!
\n要递归显示 mydll.dll 的依赖关系,深度可达 1:
\nDependencies.exe -chain mydll.dll -depth 1\n
Run Code Online (Sandbox Code Playgroud)\n输出示例:
\n \xe2\x96\xa1 mydll.dll (ROOT) : C:/.../mydll.dll\n| \xe2\x96\xa1 USER32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\user32.dll\n| \xe2\x96\xa1 ADVAPI32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\advapi32.dll\n| \xe2\x96\xa1 ole32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\ole32.dll\n| \xe2\x96\xa1 GDI32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\gdi32.dll\n| \xe2\x96\xa1 CRYPT32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\CRYPT32.dll\n| \xe2\x96\xa1 Secur32.dll (WindowsFolder) : C:\\WINDOWS\\SysWOW64\\Secur32.dll\n| \xe2\x96\xa1 MSVCP140D.dll (WindowsFolder) : C:\\WINDOWS\\SysWOW64\\MSVCP140D.dll\n| \xe2\x96\xa1 USP10.dll (WindowsFolder) : C:\\WINDOWS\\SysWOW64\\USP10.dll\n| \xe2\x96\xa1 KERNEL32.dll (WellKnownDlls) : C:\\WINDOWS\\SysWOW64\\kernel32.dll\n| \xe2\x96\xa1 VCRUNTIME140D.dll (WindowsFolder) : C:\\WINDOWS\\SysWOW64\\VCRUNTIME140D.dll\n| \xe2\x96\xa1 ucrtbased.dll (WindowsFolder) : C:\\WINDOWS\\SysWOW64\\ucrtbased.dll\n
Run Code Online (Sandbox Code Playgroud)\n如果 DLL 丢失(在任何深度),则输出类似于:
\n\xe2\x94\x9c mydll.dll (ROOT) : other.dll\n| \xe2\x94\x9c other.dll (NOT_FOUND) :\n
Run Code Online (Sandbox Code Playgroud)\n请注意,如果最大依赖深度很深,则可能需要很长时间才能生成结果。
\nIam*_*ool 17
按开始按钮,键入"dev".启动名为"VS 2017的开发人员命令提示"的程序
找出您尝试使用的程序集的完整文件路径
在打开的窗口中,键入dumpbin /dependents [path]
,[path]
您在步骤2中找到的路径在哪里
按enter键
Bam,你有你的依赖信息.窗口应如下所示:
这花了我整整一个小时才搞清楚.希望它能帮助将来的某些人.
在开发计算机上,您可以执行该程序并运行Sysinternals Process Explorer.在下部窗格中,它将显示加载的DLL和它们的当前路径,由于多种原因这很方便.如果您正在执行部署程序包,它将显示在错误的路径中引用了哪些DLL(即未正确打包).
目前,我们公司使用Visual Studio Installer项目来遍历依赖树并输出作为松散文件的程序.在VS2013中,现在这是一个扩展:https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d .然后我们将这些松散的文件打包到一个更全面的安装程序中,但至少该设置项目将所有点网依赖关系放到一个位置,并在缺少事件时向您发出警告.
Jesse 已经提到了 NDepend(如果您分析 .NET 代码),但让我们准确解释一下它如何提供帮助。
是否有一个程序/脚本可以扫描可执行文件的 DLL 依赖项或在“干净”的无 DLL 环境中执行程序进行测试以防止这些 oops 情况?
在 NDepend 项目属性面板中,您可以定义要分析的应用程序程序集(绿色),NDepend 将推断应用程序程序集使用的第三方程序集(蓝色)。提供了搜索应用程序和第三方程序集的目录列表。
如果在这些目录中找不到第三方程序集,它将处于错误模式。例如,如果我删除 .NET Fx 目录C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
,我可以看到 .NET Fx 第三方程序集未解析:
免责声明:我为 NDepend 工作
归档时间: |
|
查看次数: |
214180 次 |
最近记录: |