【发布时间】:2018-12-29 18:04:14
【问题描述】:
2.5 天,我尝试找到类似错误的根源
Could not load file or assembly "mydll.dll" or one of its dependencies.
The specified module could not be found
该项目是一个基于 Windows C# 的应用程序。该 dll 是在项目内的 C++ 库中创建的。我正在使用 VS2017 Entreprise 在 Windows 10 64 位下编译,在 Windows 7 64 位下部署时遇到问题(在 Windwos 10 下部署效果很好......)。所有 .NET libs/exes/plugins 都针对 .NET 4.5.2(安装在部署计算机上)。图书馆使用
Windows SDK Version: 8.1
Platform Toolset: Visual Studio 2017 (v141)
该项目制作了一个 msi 安装程序,我在部署计算机上成功安装了它。 dll当然是有的。
所以我用进程监视器观察了程序的执行。该dll似乎被加载了几次。 我最后一次看到以下内容。
"10:31:13.7703319 AM","App.exe","1412","CloseFile","C:\Program Files (x86)\Vendor\Programm\ucrtbased.dll","SUCCESS",""
"10:31:13.7703575 AM","App.exe","1412","ReadFile","C:\Progra mFiles (x86)\Vendor\Programm\ucrtbased.dll","SUCCESS","Offset: 1,452,544, Length: 5,120, I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O, Priority: Normal"
"10:31:13.7721639 AM","App.exe","1412","CreateFile","C:\Program Files (x86)\Vendor\Programm\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7722398 AM","App.exe","1412","CreateFile","C:\Windows\SysWOW64\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7723496 AM","App.exe","1412","CreateFile","C:\Windows\system\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7724133 AM","App.exe","1412","CreateFile","C:\Windows\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7725133 AM","App.exe","1412","CreateFile","C:\Windows\SysWOW64\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7725731 AM","App.exe","1412","CreateFile","C:\Windows\SysWOW64\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7726340 AM","App.exe","1412","CreateFile","C:\Windows\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7726991 AM","App.exe","1412","CreateFile","C:\Windows\SysWOW64\wbem\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7727622 AM","App.exe","1412","CreateFile","C:\Windows\SysWOW64\WindowsPowerShell\v1.0\api-ms-win-core-localization-l1-2-0.dll","NAME NOT FOUND","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a"
"10:31:13.7729093 AM","App.exe","1412","CloseFile","C:\Program Files (x86)\Vendor\Programm\mydll.dll","SUCCESS",""
那个api-ms-win-core-localization-l1-2-0.dll确实是被dependency walker和
一起列出的API-MS-WIN-CORE-FILE-L1-2-0.DLL
API-MS-WIN-CORE-FILE-L2-1-0.DLL
API-MS-WIN-CORE-LOCALIZATION-L1-2-0.DLL
API-MS-WIN-CORE-PROCESSTHREADS-L1-1-1.DLL
API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
API-MS-WIN-CORE-TIMEZONE-L1-1-0.DLL
API-MS-WIN-DOWNLEVEL-ADVAPI32-L1-1-0.DLL
API-MS-WIN-DOWNLEVEL-OLE32-L1-1-0.DLL
API-MS-WIN-DOWNLEVEL-SHLWAPI-L1-1-0.DLL
GPSVC.DLL
MSISO.DLL
Google 告诉我,所有这些都与这个问题无关......
现在用nm-D 和ldd 在 linux 下用 2.5 分钟完成你所做的事情需要 2.5 天...
【问题讨论】:
-
ucrtbased.dll是调试 DLL,因此您必须尝试部署程序和/或 DLL 的调试版本。如果不安装开发环境,调试库将不可用,并且无法重新分发。进行发布构建并重试。一旦你有一个发布版本,如果它仍然不能工作,你需要安装 VS2017 提供的运行时 redist 包。 -
在 SO 中负面投票的问题是,他们至少应该说明他们为什么要投票。 Richard Critten 的评论(如果无论如何与否决票有关)不是问题的原因,因为发布版本根本不会改变问题。在尝试从 Windows 10 瞄准 Win7 三天后,我得出的结论是,微软开发人员没有预见到这个用例。事实证明,您确实会遇到ghacks.net/2017/06/06/…(以及其他)描述的问题
标签: c# c++ visual-studio dll windows-7