Visual Studio 2010 случайным образом сообщает, что командная строка изменилась, и перестраивает - PullRequest
3 голосов
/ 26 сентября 2011

Visual Studio иногда решает перестроить весь мой огромный проект из-за одного небольшого изменения.Я включил ведение журнала сборки до Diagnostic, чтобы увидеть, в чем проблема, и вот что я вижу:

< Bunch of spam >
Outputs for C:\<snip>\PRECOMPILEDHEADERS.CPP:
    C:\<snip>\PRECOMPILEDHEADERS.OBJ
All outputs are up-to-date.
Forcing rebuild of all source files due to a change in the command line

... и затем он перестраивает мои предварительно скомпилированные заголовки, а затем все остальное.

Это происходит, когда я изменяю один файл .cpp или .h внутри проекта.Я ничего не меняю в настройках проекта.Это также не случается все время для того же самого изменения;это случайно.

Есть идеи, что здесь происходит?Где я могу получить больше информации?Я попытался включить отладку через описание в http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx, но больше не давало информации.Я не могу понять, откуда взялась эта «Принудительная перестройка всех исходных файлов из-за изменения в командной строке».Его нет ни в одном из заводских файлов MSBuild.

Некоторая другая информация: это проект C ++ / CLI dll, который связывает множество других проектов, включая C #, нативный c ++ и другие dll C ++ / CLI.Я попытался удалить все проекты C # из зависимостей, поскольку они, как правило, вызывают проблемы, но это не изменило его.Я погуглил эту конкретную строку, но моя ситуация не совпадает ни с одной из других людей, сообщающих об этом.(Один использовал Intel C ++, другой был MSBuild из командной строки и менял регистр. Я использую решение для сборки из самой Visual Studio).

Правка для объяснения общих исправлений, которые я пробовал:

Я пытался построить только проект.Делает то же самое.

Я не включаю никакие файлы .h, которые не существуют.

Я удалил папки bin / object и перестроил с нуля.Обычно это приводит к потере пары сборок, но потом возвращается.

Edit # 2:

В журнале обнаружилось что-то подозрительное ранее:

3>Using "ResolveNonMSBuildProjectOutput" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
3>Task "ResolveNonMSBuildProjectOutput"
3>  Resolving project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj".
3>  Project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj" has not been resolved.

Это повторяется для нескольких моих проектов ... Я пойду за этим и посмотрю, может быть, это проблема с путеводными ссылками проекта.

Ответы [ 3 ]

3 голосов
/ 27 ноября 2012

Хорошо, это старая тема, но я недавно столкнулся с той же проблемой.Мое решение состояло в том, чтобы отключить предварительно скомпилированные заголовки - теперь простое изменение в одном исходном файле больше не приведет к «перестройке».

2 голосов
/ 12 апреля 2013

У меня недавно была такая же проблема с Visual Studio 2012. Я нахожусь на Windows 7 с Visual Studio 2012 Professional (2012.2), строящей проекты C ++. Стоит отметить, что я недавно перенес решение из Visual Studio 2008 в Visual Studio 2012.

Один из проектов C ++ (исполняемый файл с проектом DLL в качестве ссылки) перестраивался каждый раз при изменении одного из его модулей компиляции, например, простое сохранение main.cpp приведет к перестройке всех модулей компиляции (включая предварительно скомпилированный заголовок). Я заметил следующее сообщение в журналах сборки:

Forcing rebuild of all source files due to a change in the command line since the last build.

Я превратил многословность файла журнала сборки в Диагностика ( Инструменты> Параметры> Проекты и решения> Построить и запустить ) и сравнил файлы журнала из чистой сборки и сборки после ее завершения. модуль компиляции был изменен (что привело к полной перестройке). Я заметил, что:

  • " Путь " изменен с одной сборки на другую ("; C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions \ Microsoft \ VsGraphics", кажется, застрял на конце)
  • была разница в TaskTracker.exe командных строках для CancelEvents
  • появилось предупреждение о том, что OutputPath не установлен

Я выдернул волосы.

Я в конечном итоге прибегнул к воссозданию проекта-нарушителя с нуля, а не полагался на проект, который был автоматически сгенерирован в процессе миграции с 2008 по 2012 год. Похоже, что сейчас он ведет себя так, как ожидалось.

1 голос
/ 27 сентября 2011

Я сделал три вещи, и проблема, кажется, ушла. Я пытаюсь немного сузить это, но я решил пойти дальше и опубликовать их:

  • Удалил и заново добавил все ссылки и ссылки на проекты
  • Исправлен один из моих проектов, который не устанавливал целевую платформу .NET на 3,5, чтобы соответствовать остальной части моего решения (мне это сходит с рук, потому что проект все равно не использовал .NET)
  • Установите для параметра "Копировать локальные спутниковые сборки" значение false для всех ссылок, включая системные.

Остерегайтесь, что некоторые или все эти вещи могут быть вуду ...

...