Подтвердить что ты не робот

Решение проблемы с Visual Studio 2010 AlwaysCreate rebuild

У меня есть проект на С++, который я переношу с VS2008 на VS2010. Когда я создаю проект, Visual Studio 2010 сообщает сборку как успешную, но если я затем нажму F5, чтобы запустить отладчик, мне сказали, что проект не обновлен. Если я игнорирую это предупреждение, я могу продолжить отладку в порядке, но если я нажму ОК, весь проект (много сотен исходных файлов), будет восстановлен с нуля. Вывод содержит следующее:

1>------ Build started: Project: SCCW-VC2010, Configuration: Debug Win32 ------
1>Build started 15/11/2010 14:47:40.
1>InitializeBuildStatus:
1>  Creating "Debug\SCCW-VC2010.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Midl:
1>  All outputs are up-to-date.
1>ClCompile:
1>  tinedit.cpp
1>  _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1>  Automatically linking with sfl504d.lib
1>  Automatically linking with ot1104d.lib
1>c:\program files\rogue wave\stingray studio 10.4\include\toolkit\sectndlg.h(134): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files\microsoft visual studio 10.0\vc\include\string.h(105) : see declaration of 'strcpy'
1>  Automatically linking with og1204d.lib
1>  Automatically linking with RWUXThemeD10.lib
1>  profile.cpp
1>  ZOffsetDialog.cpp

Через полчаса после завершения сборки начинается отладчик. Я предполагаю, что сообщение

Создание "Debug\SCCW-VC2010.unsuccessfulbuild", потому что указано "AlwaysCreate".

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

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

<ClCompile Include="..\MyDir\MyFile.cpp"/>
<ClInclude Include="..\MyDir\MyFile.h" />
<None Include="res\MyFile.ico" />  (and all similar resources)
<Library Include="..\MyDir\MyFile.lib" />

Edit2: После прохождения всего заголовка я в итоге нашел 3, которых не было. Удаление их и выполнение перестроения всех в исходном проекте, похоже, устранили проблему. Некоторые из сообщений в блоге, в которых упоминается эта проблема, относятся к ней как к ошибке, и через два дня потерянного времени я склонен согласиться. Спасибо за предоставленные ответы и комментарии.

Edit3: И через день проблема вернется! Редактирование любого файла в проекте еще раз вызывает полную перестройку. Согласно ответу Джона Диблинга, проект включает некоторые статические библиотеки, включая Stingray. Я катаюсь на VS2010 и возвращаюсь к VS2008, так как у меня есть крайние сроки. Для получения дополнительной информации см. Следующие ссылки:

VS2010 всегда думает, что проект устарел, но ничего не изменилось

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318

http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx

Final Edit. Освобождение VS2010 SP1 решило эту проблему, и сборки теперь быстрые и эффективные.

4b9b3361

Ответ 1

У меня была эта проблема много раз, и это всегда расстраивало. Я расскажу вам, в чем проблема в моем случае, но сначала я должен спросить вас:

  • Вы сделали пересоединение - все, прежде чем вы попытались запустить первый раз, или просто перестроить?
  • Как только вы выполните перестройку всех, попросите ли вы еще раз восстановить, если вы не внесли никаких изменений?

Проблема в моем случае была несколько сложной. У меня были пользовательские правила сборки, которые копируют двоичные файлы для Stingray из их исходного каталога (где они живут) в каталог в моем дереве сборки. Бинарные файлы были отмечены как зависимость, так что они были скопированы перед каждой сборкой в ​​случае их изменения.

Проверенная зависимость проверяет временные метки этих файлов, чтобы увидеть, когда они были изменены. Если в blah.lib была дата мода в декабре прошлого года в исходной папке, тогда, когда она была скопирована, она имела бы такую ​​же дату мода. Проверенная зависимость заметила бы, что "эй этот файл довольно старый, мы должны его перестроить", и тогда он спросит, хочу ли я сделать полную перестройку.

Некоторое время спустя я просто сказал "Нет", но в конце концов я исправил проблему, изменив правило пользовательской сборки, чтобы написать новый текстовый файл после его копирования. Это сделало бы новый текстовый файл зависимым, а не файлом blah.lib, и это сделало компилятор счастливым.

Ответ 2

  • Смотрите в окне вывода, какой файл перестраивается

  • Перейдите в меню ToolsOptions, затем перейдите к Project and SolutionsBuild and Run. Измените вариант MSBuild Project build output verbosity на:

    Diagnostic
    
  • Построить, получить длинный журнал

  • Найти файл (из 1) в журнале, прочитать диагностику. Вы можете найти, например, имя заголовка, в котором есть дата в будущем или отсутствует.

Ответ 3

У меня была такая же проблема как на конвертированных, так и на-скрещенных проектах. Я получил подсказку с MS-страницы о недостающих файлах. Я проверил свой проект и обнаружил, что он ссылается на файл, который не существует. Заменил его правильным файлом, и проблема исчезла.

Ответ 4

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

ИТ - это наоборот. Если вы или Visual Studio решают перестроить все, это вызывает создание файла "*.unsuccessfulbuild".

Некоторая другая проблема (обычно это заголовок, который не существует) приведет к восстановлению всех, ведущих к отображению, потому что указано "AlwaysCreate" .

"AlwaysCreate" является частью настроек среды сборки Visual Studio и является частью XML файла Microsoft.CppBuild.targets. Он содержит следующую строку: Touch AlwaysCreate = "true" Files = "$ (LastBuildUnsuccessful)" /

Это значение равно true, файл ".unsuccessfulbuild" всегда будет создан независимо от успешной сборки или нет. Если это значение изменилось на false, ".unsuccessfulbuild не создается. Если true, файл *.unsuccessfulbuild создается как пустой для продолжительности процесса сборки, а затем удаляется, если сборка выполнена успешно. Я не уверен, почему этот файл создан; даже если сборка имеет ошибки, файл пуст, но не удаляется, как в случае успешной сборки.

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

Ответ 5

Документы MSDN подразумевают, что это свойство специфично для проектов развертывания.

findstr /si AlwaysCreate в файлах проекта VS2010 должен показать вам виновника, если вы не можете его отслеживать в графическом интерфейсе.

Ответ 6

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

Ответ 7

Решено пересмотреть это с версией выпуска SP1. Я воссоздал новый проект с нуля, который вышел на 81k по сравнению с модернизированным старым проектом 1.4mb, который несли с собой всевозможные мусор. Первоначально я столкнулся с одной и той же проблемой, но мне удалось ее решить следующим образом:

  • Изменены предварительно скомпилированные заголовки в Создать (/Yc)
  • Скомпилированный один исходный файл
  • Изменены предварительно скомпилированные заголовки в Использовать (/Ю)
  • Полностью перестроил

Следующая проблема, которую я заметил, заключалась в том, что любое добавление ресурса вызывало перекомпиляцию всех файлов, содержащих include resource.h. Это было исправлено с помощью совета из Microsoft connect thread и вручную добавив следующие строки в мой проект;

<ItemGroup>
    <ClNoDependencies Include="Resource.h" />
</ItemGroup>

Ответ 8

Ссылка находится в одном из комментариев здесь, но ее легко пропустить, поэтому я перечисляю основные шаги здесь по этой ссылке: Статья MSDN

На самом деле я нашел эту ссылку самостоятельно, и только позже понял, что это уже упоминалось здесь.

1. Since it can be difficult to recover from a damaged devenv.exe.config file, consider copying the file to devenv.exe.config.original before modifying it so you have a backup copy you can revert to if things go awry.
2. Open your VisualStudioInstallFolder\Common7\IDE\devenv.exe.config file.  Note this will be in %ProgramFiles(x86)% on 64-bit Windows.
3. Open a text editor with admin privileges.
4. Add this snippet to your devenv.exe.config file just below the <configSections /> block:
    For Visual Studio 2012 and below...
    <system.diagnostics>
    <switches><add name="CPS" value="4" /></switches>
    </system.diagnostics>
    For Visual Studio 2013
    <system.diagnostics>
    <switches><add name="CPS" value="Verbose" /></switches>
    </system.diagnostics>
5. Save the text file.

Я использую Visual Studio 2010 + SP1, и оба фрагмента XML, похоже, работают.

Теперь вам нужен инструмент, который может отображать окна DebugOutput, например DebugView.

1. Start DebugView 
2. Rebuild
3. Build
4. In DebugView window search for the string ‘missing’ or 'not up to date', better still to save the DebugView log entries and open it in notepad and then search.

Ответ 9

Если нет никаких "законных" причин для постоянной перестройки (например, ссылки на отсутствующие файлы заголовков), попробуйте удалить файл решения .sdf (когда решение будет закрыто, конечно) и перестроить. Это просто сработало для меня.

Ответ 10

Если дата файла ненормальна, это событие произошло. Компилятор VS должен перекомпилировать все файлы с будущей датой. - Пример -

Current date : June 30, 2015
File date : July 1, 2015
The file is always compiled during today.

Он не связан с директивой AlwaysCreate.