小技巧:解决VS2010因为”将来时间”而无法增量编译的问题
作者:BlogUpdater |
时间:2017-07-29 |
浏览:4085 |
评论已关闭 条评论
今天是2017年7月29日,因为某些原因,我修改了系统时间到将来的一天,2017年7月30日。修改完系统时间,继续工作。
当把时间改回去后,VS2010的增量编译不能顺利进行了。每次项目编译,不管有没有改动过源代码,VS2010都会对项目进行编译,并出现“All outputs are up-to-date”提示。
这个问题对于大型项目来说,是一件比较耗费时间的事情。看起来,修改系统时间会导致VS2010的增量编译不工作。
以下是解决此问题的思路:
1) 增量编译的原理是:编译器会扫描项目所有文件(包括其所依赖的其他文件)的最后修改时间,如果最后修改时间比当前时间晚(也即,文件的最后修改时间位于将来的时间),则编译器会进行重新编译。
2) 系统时间修改之后,我修改了部分源代码,所有这些源文件的修改时间位于将来时间。
3) 系统时间修改回去,这些已修改的源代码的最后修改时间依然位于将来时间。所以,VS2010每次都会编译。增量编译在这种情况不再起作用了。
解决方法:
1) 查看是那些文件的时间位于将来时间:
打开VS2010的设置,将MSBUILD的输出级别调整为Detailed,如下图所示:
2) 重新编译项目,观察输出窗口的日志,会看到类似如下的信息:
3) 修改日志中的源文件,然后保存,那么这些源文件的时间就会恢复成当前系统时间,而不是将来时间。
4) 重新编译项目两次,第一次因依赖文件改动而执行编译,第二次就不会再编译了。增量编译再次发挥了作用。
结论:在编写大型工程,修改系统时间需要谨慎,因为这个时间的改动会影响所有被修改源文件的时间,从而会影响到增量编译。
如需转载,请注明来自:Topomel Box
- 下一篇: 实战经验:为本地服务器创建自签名证书链
- 上一篇: 小技巧:优化HTTPS站点配置
相关推荐
- 成员函数指针的一些奇怪行为
- Posted on 12月03日
- 对话框模板简史-终章
- Posted on 04月18日
- 对话框管理器第二章:创建框架窗口
- Posted on 07月24日
- 实战经验:使用IFileOperationProgressSink接收文件操作通知
- Posted on 11月04日
评论已关闭。