8

众所周知,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 更新服务可能会有所帮助(它将停止更新文件),但有或可能有其他软件无法通过这种方式禁用(防病毒、其他实用程序等)。
另请参阅相关问题:

4

3 回答 3

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>

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

于 2012-06-05T17:04:37.363 回答
0

通过将 C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\ 添加到我的用户属性表 VC++ 目录/排除目录中,我能够摆脱这个问题。

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

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

于 2013-08-08T17:40:37.240 回答
0

CONFIG.BOPSSophos文件也有同样的问题。我们有一个庞大的团队,我们的解决方案有 80 多个项目,因此其他人描述的解决方法对我们没有吸引力。我采用了一种效果很好的方法。有人可能会说这是一个彻头彻尾的黑客攻击,我承认确实如此,但它非常简单,并且在微软修复这个问题之前它现在可以工作。

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

于 2012-08-10T15:09:57.790 回答