由于修改了无关的文件,VS2010重建了C ++项目

时间:2012-02-23 11:20:42

标签: visual-studio-2010 msbuild-4.0

正如我们所有人都已经知道VS2010已经对其构建系统进行了重大升级,该系统基于MSBuild。
根据MS代表的说法(参见Visual Studio 2010 always rebuild project after hibernation/restart of computer中的评论),MSBuild现在将自己注入到其他工具(如C ++编译器,链接器等)中,以找出目标的依赖关系。
这种方法的一个缺点是现在你的项目可能因为无关文件的修改而被强制重建 :(
在我的情况下,它是C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN,由NVIDIA更新服务(Windows 7 32位)定期更改。

我发现通过将VS2010选项“ MSBuild项目构建输出详细程度”和“ MSBuild项目构建日志文件详细程度”转换为“ Diagnostic ”。
之后,我能够在Build Output窗口中看到问题的原因:

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更新服务可能会有所帮助(它将停止更新文件),但有一些或者可能有其他软件无法以这种方式禁用(防病毒,其他实用程序等)。
另见相关问题:

3 个答案:

答案 0 :(得分:1)

我有同样的问题,除了我的案例中的“修改”文件是

C:\PROGRAMDATA\SOPHOS\SOPHOS ANTI-VIRUS\CONFIG\CONFIG.BOPS

微软承认存在一个错误(将在下一个版本中修复 )并建议解决方法

http://connect.microsoft.com/VisualStudio/feedback/details/715572/unexpected-rebuild-of-projects

http://connect.microsoft.com/VisualStudio/feedback/details/649139/vs2010-does-complete-rebuild-based-on-completely-unrelated-file

但到目前为止,这些都没有对我有用。我还在尝试用我的

捣乱
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets

文件并在我的属性表中添加以下内容

<ItemGroup>
  <ClNoDependencies Include="C:\PROGRAMDATA\SOPHOS\SOPHOS ANTI-VIRUS\CONFIG\CONFIG.BOPS"/>
</ItemGroup>

但到目前为止我没有运气。也许你可以让这个解决方案为你工作? (如果有,请告诉我!)

答案 1 :(得分:0)

我们在Sophos CONFIG.BOPS文件中遇到了同样的问题。我们有一个庞大的团队,我们的解决方案有80多个项目,因此其他人描述的解决方案对我们没有吸引力。我采取了一种非常有效的方法。有些人可能会说这是一个完全黑客攻击,我承认它是,但它非常简单,现在可以使用,直到微软修复此问题。

我在C#中编写了一个小型桌面托盘应用程序来监视CONFIG.BOPS文件,每当时间戳发生变化时,它都会使用File.SetLastWriteTime将其设置回旧日期而不修改文件内容。该应用程序必须在Windows 7上以管理员身份运行,但这对我们来说很好,因为我们的员工都拥有对其PC的管理员权限。我们没有NVDRSDB0.BIN问题,但我怀疑它也适用于该案例。

答案 2 :(得分:0)

我能够通过将C:\ PROGRAMDATA \ NVIDIA CORPORATION \ DRS \添加到我的用户属性表VC ++目录/排除目录中来解决此问题。

要编辑此文件,请打开View-&gt; Property Manager,它将位于每个项目/配置下。

如果您不想在系统范围内执行此操作,则可以创建新的属性表并将其添加到您需要为其设置的项目中。您可以在Property Manager中多选择所需的所有项目,然后右键单击 - >添加新属性表。