Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VS2010 rebuilds C++ project because of modified irrelevant files

As all of us already know VS2010 has got an major upgrade of its build system, which is based on MSBuild.
According to MS representatives (see comments in Visual Studio 2010 always rebuild project after hibernation/restart of computer) MSBuild now injects itself into other tools (like C++ compilers, linkers, etc.) to find out the dependencies of a target.
One of the drawbacks of such approach is that now your project may be forcedly rebuilt because of modifications in irrelevant files :(
In my case it is C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN, which is periodically changed by NVIDIA update service (Windows 7 32-bit).

I've discovered that by turning VS2010 options "MSBuild project build output verbosity" and "MSBuild project build log file verbosity" to "Diagnostic".
After that I was able to see the cause of the issue in the Build Output Window:

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)

One of the workarounds is to add the irrelevant files to C++ ignore list:

<ItemGroup>
  <ClNoDependencies Include="NVDRSDB0.BIN" />
  <ClNoDependencies Include="C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN" />
</ItemGroup>

Unfortunately this doesn't help :( And I didn't yet check how this trick works on other PCs, where such files don't exist.

So the question remains: is anybody aware of the working solution for this problem?

I didn't try installing SP1 for VS2010 - according to enthusiast this step doesn't help either.
Disabling NVIDIA update service may probably help (it will stop updating the file), but there are or may be other software which cannot be disabled this way (antivirus, other utilities, etc.).
See also related questions:

  • VS2010 always thinks project is out of date but nothing has changed (the similar issue seems to be caused by a missing source file)
like image 990
AntonK Avatar asked Feb 23 '12 11:02

AntonK


1 Answers

I have this same problem, except that the "modified" file in my case is

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

Microsoft has admitted there is a bug (which will be fixed in the next release) and suggested workarounds

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

but none of these has worked for me so far. I'm still trying to muck with my

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

file and add something like the following to my property sheets

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

but I have had no luck so far. Perhaps you can get this work-around to work for you? (Let me know if it does!)

like image 56
aldo Avatar answered Nov 15 '22 06:11

aldo