新系统装vs2015遇到的坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wagner_zk/article/details/81978978

安装

以前用这个vs2015 ISO安装文件装过两次,所以能保证安装包是好的。但在这次新装的系统上,用虚拟光驱加载后运行安装,总会弹出框说找不到***.cab让指定目录,因为是内网不可能联网下载,故想到从虚拟光驱中提取出文件到硬盘。

一开始因为新加的系统盘是固态硬盘,磁盘IO会快,就提取到了C盘,担心到权限问题,还特地用管理员身份启动安装exe,还是会不停弹框让指定文件。

没招,只能重新提取文件到别的盘,顺利装完。

因为之前跳过几次,所以还用了“修复”把之前跳过安装的包重新指定下,vs2015安装完毕。

编译

编译程序发现报一堆跟VS相关的错,因为之前遇到过VS系统文件被篡改的情况,下意识检查指定目录下有没有对应文件,以及文件内容是否有问题,文件都存在。于是新建一个MFC工程,看能否编译成功,发现报错:

c:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afx.h(78): fatal error C1083: 无法打开包括文件: “new.h”: No such file or directory

百度之,知道new.h文件所在目录是C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt 

而VS项目配置中的VC++包含目录配置的是C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt 

注意到150和240的不同!

先用手动添加包含目录的方法试验下是不是这个问题

参考:https://blog.csdn.net/tht273497754/article/details/52768880

改完后编译通过,确定问题。但我的项目中那么多解决方案,不可能一个个手动这样修改,只能继续寻求怎么一次解决后续无忧的解决方案。

发现vs2015中 工具-选项-项目和解决方案-VC++目录 已被禁用,都是建议在项目属性中修改的方式,可那些环境变量,比如$(VC_IncludePath) $(WindowSDK_IncludePath) 都是从父级或项目默认设置继承的,从VS2015可视化界面上根本找不到地方修改这些宏。我的目的很明确,就是要修改$(VC_IncludePath)中ucrt的目录文件夹,那只可能在某些配置文件中。

继续百度,找到相关的这些文章:

参考文章1:为Visual Studio添加默认INCLUDE包含路径一劳永逸的方法(更新)
参考文章2:VS2015找不到stdio.h或new.h的Bug修复
参考文章3:如何统一设置VS解决方案的属性

这三篇文章里都提到了这样两个文件:

文件一:“VS安装目录中的\VC\VCWizards\default.vcxproj

例如我的目录是“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\VCWizards\default.vcxproj”

文件二:"%AppData%\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props"

参考文章1 说明了文件一和文件二之间的关系,以及对VS编译的影像。建议先读。

参考文章2和3都是引导修改文件二,可是我系统里的文件二打开与他们的不尽相同,只有

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

</Project>

并没有下面的

  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup />
  <ItemGroup />

再加上这里太多的预设宏

并且不同人加的内容还不一样,不敢贸然改。

更重要的原因是,我感觉他们是往VS里添加额外的包含目录,而我要修改的是默认预设的Windows Kits目录,还不是完全一样。

继续搜索,看到这个标题眼前一亮,这不就是我想要的嘛!

Where is WindowsSDK_IncludePath defined?

有了前面中文文章的基础,再看这个很容易过滤掉重复的回答,直到看到这个回答

就是它了!迫切打开 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140下的Microsoft.Cpp.Common.props文件,

改了就是我要改的10.0.10240.0这串数字,保存,发现居然保存不了,居然文件是只读的。这难不倒我,文件-属性,把只读勾去掉,继续改,保存,居然又弹“check whether if this file is opened in another program”。NND,文件被占用,我居然第一时间被它唬住了,脑子里迅速过难道vs有什么后台服务在用这个文件,还傻乎乎地注销了次系统,发现还是不行。最后一步了,不能死在这,网上的前人能修改成功说明是可以改的,继续百度之。看了眼百度快照结果,顿时灵光一现,莫不是C盘权限问题,没有管理员权限,当然直接保存是不行的啦,果断另存为到桌面,再拷过来覆盖,欧了!

赶紧新建个MFC项目,切换到项目属性里VC++目录下一看,默认包含的路径全改成了:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt

编译通过!再编译我的项目解决方案,全部编译成功,太棒了!

过程艰辛,有些实操经验,比如最后的管理员权限等等啦,还是记录下,以备后来之需。

猜你喜欢

转载自blog.csdn.net/wagner_zk/article/details/81978978