Visual Studio 2015 - Windows XP (v140_xp) 编译工具 ucrtbased.dll缺失


先写结论,最好不要使用VS2015-WinXP编译工具来编译VC++程序,因为你最终会发现,编译出来的程序如果是动态链接到运行库的话,即便你已经拷贝了所有需要的运行库dll,当在xp系统上运行时,还是会提示缺少ucrtbased.dll(Debug版)或者ucrtbase.dll(Release版)。

解决办法有两个:

1.静态链接到运行时库  (MT 或者 MTd)    如果使用了MFC,还要静态链接到MFC

2.安装VS2013  直接用VS2013-WinXP来编译,编译出的程序只要附带上运行库dll即可直接在XP上运行

下面记录一下自己使用Visual Studio 2015 - Windows XP (v140_xp) 碰到的坑:

开始时,使用的VS2015 SP1,platform toolset选择的Visual Studio 2015 - Windows XP (v140_xp) ,编译出来debug版的程序,是动态连接到MFC和CRT的,我把所有需要的vc runtime dlls都拷贝到了xp虚拟机里面,但是发现程序无法运行,弹出无法找到ucrtbased.dll,于是google开始找解决办法,微软的官方说法是 VS2015修改了CRT runtime,增加了ucrtbase.dll这么个组件,这个组件必须得操作系统安装一个补丁才能有,直接把文件拷贝过去是不行的。但是XP没有这个补丁,最低是WIN7。

然后从VS2015SP2开始,微软修复了这个问题,XP也可以安装ucrtbase.dll这个组件了,方法就是必须安装VS2015的vcredist_x86.exe,这个文件的路径在D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\1033下面,于是我开始更新我的VS2015,下载了SP3的更新包(下载链接),更新完毕花了将近4个小时。

然后我用VS2015SP3重新编译了release版的程序,并且在我xp的虚拟机里面安装了SP3版本的vcredist_x86.exe,程序可以运行了。

但是还是有如下问题:

1.编译出来的debug版的程序仍然无法在xp上运行,因为缺少ucrtbased.dll,我也没有找到debug版的vcredist_x86.exe

2.我的程序没有安装包,我不想用户在使用的时候还必须得安装一个vcredist_x86.exe,那跟使用C#程序之前必须安装一个.net framework有什么区别?

最后我决定使用VS2013-Windows XP 来编译我的程序,因为我电脑上之前装有VS2013,后来装的VS2015,所以工程-属性里面可以直接选择VS2013的platform toolset。这样的话就可以使用VS2015的IDE来写代码,使用VS2013的编译器来编译生成程序。

而且我可以确定的说,VS2013-Windows XP编译出来的无论是debug版还是release版,32位或者64位,只需将对应的VC Runtime dll拷贝到程序目录下,就可以直接在XP上运行,方便调试和使用。

至于说如何为VS2015安装VS2013的平台工具集(platform toolset),老老实实再装一个VS2013吧,装完之后,VS2015里面会自动识别出来的。简单的办法我用google也没有找到,如果谁找到了,评论里面留言下,多谢~。毕竟再装一个VS2013是要花很多时间和精力的~~