从Windows 10 VS2017进行编译在Windows 7上部署...并没有找到DLL

时间:2018-07-21 19:08:35

标签: c# c++ visual-studio dll windows-7

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库/ exes /插件均以.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 列出了

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-Dldd在Linux下用2.5分钟在2.5分钟内完成您的工作……

1 个答案:

答案 0 :(得分:0)

在尝试从Windows 10高效定位Windows 7的三天后,我分享了我的经验,并得出以下答案:
微软开发人员从未预见到这一点。 MS提供了一些技巧,但无法实现可靠的开发链。

  1. 在您遇到的其他问题中,请查看此link ..(严重的是,您必须手动卸载Microsoft软件包才能进行Microsoft Update?是Microsoft吗?)
  2. 截至2018年,没有有效的工具可以告诉您Microsoft世界中缺少哪些动态库(基本上没有ldd的等效项)...甚至还没有开始告诉我有关DependecyWalker或其他任何内容的信息,它会产生过多的误报(信噪比>>> 100%),并且已过时。

这与此处不值得一提的1000个其他Microsoft典型问题(程序包冲突等)一起导致说,在理论上可以做到这一点 ,但却没有。 (如果在Linux下几分钟之内需要花数小时或数天的时间,我认为这实际上是不可行的)

我对读者的建议是,如果您需要以Win7为目标,那么请使自己成为Win7开发虚拟机。

当然,如果您的公司只能为您提供VS2017而不是2015,则会出现问题。Microsoft非常清楚这个难题,实际上这正是他们的目标。强迫您购买新产品,或迫使客户切换到新操作系统...

Richard Critten的答案BTW与该问题无关