C# 从Windows 10编译VS2017在Windows 7上部署并。。。未找到DLL

C# 从Windows 10编译VS2017在Windows 7上部署并。。。未找到DLL,c#,c++,visual-studio,dll,windows-7,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 Enterprise在Windows 10 64位下编译,在Windows 7 64位下部署时遇到问题(在Windwos 10下部

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 Enterprise在Windows 10 64位下编译,在Windows 7 64位下部署时遇到问题(在Windwos 10下部署效果很好…)。所有.NET libs/exes/plugins都以.NET 4.5.2(安装在Deployment计算机上)为目标。图书馆的使用

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-LOCATIONAL-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
谷歌告诉我所有这些都与这个问题无关。。。
现在,在linux下使用
nm-D
ldd
只需2.5分钟,就可以完成2.5天的任务

经过3天的努力,我从Windows 10高效地瞄准了Windows 7,我分享了我的经验,并得出以下答案:
微软开发人员从未预见到这一点。MS提供了一些黑客攻击,但无法实现可靠的开发链

  • 在您将遇到的其他问题中,请看这个..(说真的,您必须手动卸载Microsoft软件包才能执行Microsoft更新?说真的,是Microsoft吗?)
  • 截至2018年,还没有有效的工具可以告诉您Microsoft世界缺少什么动态库(基本上没有ldd的等价物)。。。甚至不要告诉我关于DependecyWalker或其他任何东西,它给出了太多的假阳性(>>100%信噪比),已经过时了
  • 这一点,再加上1000个其他微软典型问题(包冲突等),在这里不值得一提,可以说这样做在理论上是可能的,但在实践中是不可能的。(如果在Linux下几分钟内完成的事情花费数小时或几天),我不会认为这是可行的。 我给读者的建议是,如果您需要以Win7为目标,那么就让自己成为一个Win7开发虚拟机

    当然,如果您的公司只能为您提供VS2017,而不是2015,那么问题就会出现。这一困境对于微软来说是众所周知的,事实上这正是他们的目标。强迫您购买新产品,或者您的客户切换到新操作系统


    Richard Criten的回答顺便说一句,与此问题无关。dll是一个调试dll,因此您必须尝试部署程序和/或dll的调试版本。未安装开发环境,调试库不可用,无法重新分发。创建发布版本并重试。一旦你有了一个发布版本,如果它仍然不起作用,你将需要安装VS2017提供的运行时redist包。因此,负向下投票的问题是,他们至少应该告诉他们为什么向下投票。理查德·克里滕(Richard Criten)的评论(如果与否决票有关的话)不是问题的原因,因为发布版本根本不能改变问题。经过三天的努力,从Windows10iCOM以Win7为目标,微软开发人员没有预见到这个用例。事实证明,您确实会遇到这里描述的问题(除其他问题外)
    甚至不要开始告诉我关于DependecyWalker的事
    -您是否查看了“新”?:)