在Visual Studio 2013中msvcr120.dll和msvcr120_app.dll有什么区别?

Ram*_*rma 6 c++ visual-c++ microsoft-metro visual-studio-2013 windows-8.1

当我使用Visual Studio 2013 Preview构建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时)?

Ram*_*rma 10

在Visual Studio 2013中,用于桌面应用程序的C++运行时DLL与用于Windows应用商店应用程序的DLL不同.

  • 桌面应用程序使用名为msvcr120.dll,msvcp120.dll,vcamp120.dll,vcomp120.dll,vccorlib120.dll等运行时DLL.使用位于" $(VCInstallDir)lib "中的C++ Libs构建的二进制文件依赖于这些DLL.

  • 应用商店应用使用运行时DLL名称,如msvcr120_app.dll,msvcp120_app.dll,vcamp120_app.dll,vcomp120_app.dll和vccorlib120_app.dll.使用位于" $(VCInstallDir)lib\store "中的C++ Libs构建的二进制文件依赖于这些DLL.

主要区别在于Store DLL(名称中包含_app的那些)完全使用可用于Store应用程序的Windows API实现.这可以通过在两种类型的DLL上运行"dumpbin/imports"并比较结​​果来验证.

此外,不需要在System32中安装Store DLL,因为使用此处描述的单独依赖包机制可以满足Store应用程序的运行时依赖性.VS2012和VS2013的VCLibs框架之间的一个区别是:在Visual Studio 2013中,VCLibs调试AppX包中包含Debug和Release CRT DLL.

另请注意,任何包含依赖于桌面C++运行时DLL的二进制文件的商店应用程序都不会被Windows应用商店接受.

  • 实际上那些dll不应该在那里.或者该应用程序不会通过Microsoft的桌面应用程序认证.自Windows 2000以来,"不安装到system32"策略已经存在. (3认同)