我有一个VS10经常认为过时的项目。我可以按[F7]并看到构建完成没有错误,只需等待一分钟,再次按[F7]并重新连接。如果我尝试运行或调试,它会警告我项目已过时。
根据接受的答案here,我能够从devenv.exe
捕获调试输出,并找出它想要重建的原因:
[5392] Project 'Q:\swdev\X\tests\X.Y.Z\src\X.Y.Z.vcxproj' not up to date because 'Q:\SWDEV\X\TESTS\X.Y.Z\BIN\X64\WIN32\CHECKED\X.Y.Z.ILK' was modified at 08/15/2017 03:32:38, which is newer than 'Q:\SWDEV\X\TESTS\X.Y.Z\BIN\X64\WIN32\CHECKED\X.Y.Z.PDB' which was modified at 08/15/2017 07:32:36.
我不确定为什么第二次以UTC显示,第一次显示在当地时间,但我不认为这是问题所在,因为它的声称更新似乎正确反映实际时间关系。
当我手动检查文件时,.ilk
文件确实在3:32:38被修改,比.pdb
晚2秒,在3:32:36修改。
this question的答案最初看起来很有希望,但与那个问题不同,我的CL和LINK设置确实有单独的PDB文件,C / C ++设置为$(IntDir)vc$(PlatformToolsetVersion).pdb
,链接器设置为{{1 }}。只是要仔细检查,我还有一个$(TargetDir)$(TargetName).pdb
文件修改3:29:42。
我已经在不同的地方看到过总是会重建的建议。问题可能是由于从之前的VS升级。对于这个项目来说情况并非如此(虽然它依赖于一个库 从VS9升级而且没有有这个问题。)在事实上,我删除了除源代码之外的所有内容,并从头开始重新创建解决方案和项目,问题仍然存在。
我的所有开发文件都在Oracle Solaris'所公开的网络共享上。 CIFS,但是这个服务器也被用于许多其他东西,包括其他版本的Visual Studio(9和12)中的项目没有问题。
我很困惑为什么它甚至被配置为依赖于bin\x64\win32\checked\obj\vc100.pdb
文件。 AFAIK该文件将包含链接器用于增量链接的内部数据,因此1.除非实际链接器输入也发生变化,否则您不会期望它有意义地更改.2。它可能与{{1所以我认为甚至测试这个文件都没有意义。
我对MSBuild系统知之甚少,不知道是什么让它做这个检查或如何阻止它。
作为一种解决方法,我已经关闭了增量链接,这会使问题消失,但我真的想知道是否有适当的解决方案。对于这个项目,不使用增量链接是无关紧要的,但对于其他人来说,它可能成为一个问题。