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

时间:2013-08-27 03:25:08

标签: 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时)?

1 个答案:

答案 0 :(得分:10)

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

  • 桌面应用程序使用名为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,因为使用单独的依赖包机制described here可以满足Store应用程序的运行时依赖性。 VS2012和VS2013的VCLibs框架之间的一个区别是:在Visual Studio 2013中,VCLibs调试AppX包中包含Debug和Release CRT DLL。

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