众所周知,VS2010 对基于 MSBuild 的构建系统进行了重大升级。
根据 MS 代表的说法(参见Visual Studio 2010 中的注释,总是在计算机休眠/重新启动后重建项目)MSBuild 现在将自身注入其他工具(如 C++ 编译器、链接器等)以找出目标的依赖关系。
这种方法的缺点之一是,现在您的项目可能会因为不相关文件的修改而被强制重建:(
在我的情况下C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN
,它是由 NVIDIA 更新服务(Windows 7 32 位)定期更改的。
我发现通过将 VS2010 选项“ MSBuild project build output verbosity ”和“ MSBuild project build log file verbosity ”转换为“ Diagnostic ”。
之后,我能够在构建输出窗口中看到问题的原因:
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 总是认为项目过期但没有任何变化(类似的问题似乎是由于缺少源文件引起的)