Решение Visual Studio 2010 AlwaysCreate проблема перестроения - PullRequest
18 голосов
/ 15 ноября 2010

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

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 , но ничего, что до сих пор не работало.Кто-нибудь еще имел эту проблему и знает об исправлении?

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

<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

Окончательное редактирование Выпуск VS2010 SP1 решил эту проблему, и теперь сборки выполняются быстро и эффективно.

Ответы [ 10 ]

12 голосов
/ 30 мая 2012
  1. Посмотрите в окне вывода, какой файл перестраивается

  2. Перейдите в меню Tools -> Options, затем перейдите к Project and Solutions -> Build and Run.Измените параметр MSBuild Project build output verbosity на:

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

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

8 голосов
/ 15 ноября 2010

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

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

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

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

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

5 голосов
/ 03 марта 2012

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

3 голосов
/ 07 января 2015

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

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

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

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

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

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

2 голосов
/ 15 ноября 2010

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

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

0 голосов
/ 20 октября 2016

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

0 голосов
/ 30 июня 2015

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

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

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

0 голосов
/ 17 июня 2015

Ссылка находится в одном из комментариев здесь, но ее легко пропустить, поэтому я публикую здесь основные шаги этой ссылки: Статья 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.
0 голосов
/ 10 августа 2011

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

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

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

<ItemGroup>
    <ClNoDependencies Include="Resource.h" />
</ItemGroup>
0 голосов
/ 15 июля 2011

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

...