如何解决无法找到DLL的问题



在我的c# Wpf项目中,我需要一些来自c++的函数。所以我自己做了一个名为LibC的c++ DLL项目。Wpf应用程序可以在我的电脑上正常运行。但是在测试者的计算机上,日志显示:

Unable to load DLL 'LibC.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我检查了DLL文件LibC.dll在那里。通过检查此帖子:无法加载DLL(模块无法找到HRESULT: 0x8007007E)

安东尼·海沃德她的回答激励了我。所以我在dumpbin命令下面运行,发现我的dll依赖于那4个窗口的dll。在测试者的计算机上,缺少两个:vcruntime140d.dllucrtbased.dll。而在我的电脑上,这四个dll都可以找到。所以我把丢失的两个dll复制到测试者的电脑上,把它们和我的LibC.dll放在一起,然后应用程序现在运行得很好。

我的问题是如何更好地解决这类问题?正如我所说,我将丢失的dll文件手动复制到测试人员的计算机上。

另一种方法是将这两个dll放入我的项目中,并将它们与我的项目文件(包括exe文件和LibC.dll)一起发布。

是否可以静态链接两个丢失的dll到我的LibC.dll?还有其他建议吗?

"c:Program Files (x86)Microsoft Visual Studio2019ProfessionalvcToolsMSVC14.29.30133binHostx64x64dumpbin.exe" /DEPENDENTS libc.dll
Microsoft (R) COFF/PE Dumper Version 14.29.30143.0
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file libc.dll
File Type: DLL
Image has the following dependencies:
KERNEL32.dll
USER32.dll
VCRUNTIME140D.dll
ucrtbased.dll
Summary
1000 .00cfg
1000 .data
2000 .idata
1000 .msvcjmc
3000 .pdata
4000 .rdata
1000 .reloc
1000 .rsrc
A000 .text
10000 .textbss

您的用户将需要安装visual c++运行时。典型的方法是使用一个安装程序,该安装程序静默地执行此操作。据我所知,它们不能被编译到您的程序中,并且许可证禁止在再分发包之外分发丢失的dll。

请注意,如果您更新用于编译dll的Visual studio版本,则可能需要更新此包。

还需要注意,您需要部署应用程序的发布版本,因为dll的调试版本仅作为visual studio的一部分分发。

最后,纯。net代码没有这些问题,所以如果你有c++代码,最好用c#重写。如果你想访问一些第三方dll,最好使用P/Invoke直接访问该dll。

最新更新