当我使用Visual Studio 2013预览版构建Windows应用商店应用程序时,我注意到我的应用程序二进制文件依赖于msvcr120_app.dll。这个dll是什么?我还注意到msvcr120_app.dll没有安装在"C:\Windows\System32"中,而msvcr120.dll安装在那里。
我不清楚
-
msvcr120_app.dll和msvcr120.dll有什么区别?
-
如果System32中没有安装依赖项msvcr120_app.dll,我的应用程序如何运行(当我在Visual Studio项目中点击F5时)?
在Visual Studio 2013中,用于桌面应用程序的C++运行时DLL与用于Windows应用商店应用程序的DLL不同。
-
桌面应用程序使用名为msvcr120.dll、msvcp120.dll、vcamp120.dll、vcomp120.dll、vccorlib120.dll等的运行时dll。使用位于"$(VCInstallDir)lib"中的C++库构建的二进制文件依赖于这些dll。
-
存储应用程序使用运行时dll名称,如msvcr120_app.dll、msvcp120_app..dll、vcamp120_app.dll,vcomp120_app.dll和vccorlib120_app..dll。使用位于"$(VCInstallDir)lib\Store"中的C++库构建的二进制文件依赖于这些dll。
主要区别在于Store DLL(名称中带有_app的DLL)完全使用适用于Store应用程序的Windows API实现。这可以通过在两种类型的DLL上运行"dumpbin/inports"并比较结果来验证。
此外,Store DLL不需要安装在System32中,因为Store应用程序的运行时依赖关系可以使用此处描述的独立依赖包机制来满足。VS2012和VS2013的VCLibs框架之间的一个区别是:在Visual Studio 2013中,VCLibs调试AppX包同时包含调试和发布CRT DLL。
请注意,Windows应用商店不会接受任何包含任何依赖于桌面C++运行时DLL的二进制文件的应用商店应用程序