根据微软代表的说法(请参见Visual Studio 2010 always rebuild project after hibernation/restart of computer中的评论),MSBuild现在将自己注入到其他工具(如C++编译器、链接器等)中,以查找目标的依赖关系。
这种方法的一个缺点是,现在你的项目可能会因为不相关文件的修改而被强制重新构建:(
在我的情况下,这是由NVIDIA更新服务(Windows 7 32位)定期更改的
C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN
。
我发现通过将VS2010选项"MSBuild项目生成输出详细信息"和"MSBuild项目生成日志文件详细信息"设置为"诊断",可以看到问题的原因在生成输出窗口中:
Task "CL" (TaskId:55)
Read Tracking Logs: (TaskId:55)
..\..\temp\Release\Editor\cl.read.1.tlog (TaskId:55)
Outputs for E:\USERS\A.USER.ORG\DEVEL\EDITOR\STDAFX.CPP: (TaskId:55)
E:\USERS\A.USER.ORG\DEVEL\TEMP\RELEASE\EDITOR\STDAFX.OBJ (TaskId:55)
C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN was modified at 23-Feb-12 12:08:20. (TaskId:55)
stdafx.cpp will be compiled. (TaskId:55)
...
Tracking command: (TaskId:55)
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe ... stdafx.cpp /clr:nostdlib (TaskId:55)
stdafx.cpp (TaskId:55)
Done executing task "CL". (TaskId:55)
一个解决方法是将无关文件添加到C++忽略列表中:
<ItemGroup>
<ClNoDependencies Include="NVDRSDB0.BIN" />
<ClNoDependencies Include="C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN" />
</ItemGroup>
很遗憾,这并没有帮助 :( 我还没有检查这个技巧在其他PC上的工作原理,那里没有这样的文件。
因此问题仍然存在:有人知道解决这个问题的方法吗?
我没有尝试安装VS2010的SP1-根据爱好者的说法,这一步也没有帮助。
禁用NVIDIA更新服务可能会有所帮助(它将停止更新文件),但可能有其他软件无法通过这种方式禁用(防病毒软件,其他实用程序等)。
另请参见相关问题:
- VS2010始终认为项目已过期,但没有任何更改(类似问题似乎是由缺少源文件引起的)