VS2010 перестраивает проект C ++ из-за измененных неактуальных файлов - PullRequest
8 голосов
/ 23 февраля 2012

Как все мы уже знаем, VS2010 значительно обновил свою систему сборки, основанную на MSBuild.
По словам представителей MS (см. Комментарии в Visual Studio 2010 всегда перестраивает проект после спящего режима / перезапускакомпьютера ) MSBuild теперь внедряет себя в другие инструменты (такие как компиляторы C ++, компоновщики и т. д.), чтобы выяснить зависимости цели.
Одним из недостатков такого подхода является то, что теперь ваш проектможет быть принудительно восстановлен из-за изменений в нерелевантных файлах : (
В моем случае это C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN, который периодически изменяется службой обновлений NVIDIA (32-битная версия Windows 7).

Iобнаружил, что, повернув параметры VS2010 " MSBuild build build of verbosity " и " MSBuild build build log file verbityity " в " 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)

Один из обходных путей - добавить несоответствиеt файлы в C ++ игнорируют список :

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

К сожалению, это не помогает :( И я еще не проверял, как этот трюк работает на других ПК, где такие файлы не существуют.

Таким образом, остается вопрос: кто-нибудь знает о работающем решении этой проблемы ?

Я не пробовал устанавливать SP1 для VS2010 - по словам энтузиастов, этот шаг неЭто тоже не поможет.
Отключение службы обновлений NVIDIA может, вероятно, помочь (оно прекратит обновление файла), но есть или могут быть другие программы, которые не могут быть отключены таким образом (антивирус, другие утилиты и т. д.).
См. Также связанные вопросы:

Ответы [ 3 ]

1 голос
/ 05 июня 2012

У меня такая же проблема, за исключением того, что "измененный" файл в моем случае -

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

Microsoft признала, что существует ошибка (которая будет исправлена ​​ в следующем выпуске ), и предложила обходные пути

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>

но мне пока не повезло. Может быть, вы можете заставить этот обходной путь работать на вас? (Дайте мне знать, если это так!)

0 голосов
/ 08 августа 2013

Мне удалось избавиться от этой проблемы, добавив C: \ PROGRAMDATA \ NVIDIA CORPORATION \ DRS \ в свой список свойств пользователя Каталоги VC ++ / Исключить каталоги.

Чтобы отредактировать этот файл, откройте View-> Property Manager, он будет находиться под каждым проектом / конфигурацией.

Если вы не хотите использовать всю эту систему, вы можете создать новый лист свойстви добавьте его только к проектам, для которых вы хотите установить его.Вы можете выбрать несколько проектов, для которых этот набор необходим, в Диспетчере свойств и щелкнуть правой кнопкой мыши-> Добавить новую страницу свойств.

0 голосов
/ 10 августа 2012

У нас была такая же проблема с файлом Sophos CONFIG.BOPS. У нас большая команда, и у нашего решения более 80 проектов, поэтому обходной путь, описанный другими, нам не понравился. Я выбрал подход, который прекрасно работал. Некоторые могут сказать, что это полный взлом, и я это признаю, но он невероятно прост и пока работает, пока Microsoft не исправит это.

Я написал крошечное приложение для рабочего стола в C #, которое отслеживает файл CONFIG.BOPS, и всякий раз, когда метка времени изменяется, она устанавливает старую дату, используя File.SetLastWriteTime без изменения содержимого файла. Приложение должно быть запущено от имени администратора в Windows 7, но это хорошо для нас, поскольку все наши сотрудники имеют права администратора на своих ПК. У нас нет проблемы NVDRSDB0.BIN, но я подозреваю, что она может работать и в этом случае.

...