小技巧:解决VS2010因为”将来时间”而无法增量编译的问题

小技巧:解决VS2010因为”将来时间”而无法增量编译的问题

作者:BlogUpdater |  时间:2017-07-29 |  浏览:2095 |  评论已关闭 条评论

今天是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) 重新编译项目两次,第一次因依赖文件改动而执行编译,第二次就不会再编译了。增量编译再次发挥了作用。

结论:在编写大型工程,修改系统时间需要谨慎,因为这个时间的改动会影响所有被修改源文件的时间,从而会影响到增量编译。

标签:

评论已关闭。