Visual Studio: проект не обновлен ", потому что" AlwaysCreate "был указан"?
Я перенесла решение из VS2008 в VS2010 (SP1).
Теперь один из моих проектов никогда не находит мир в обновлении. Каждая сборка имеет следующий вывод:
1>------ Build started: Project: PROJ_NAME, Configuration: Release Win32 ------
1>Build started 19/05/2011 7:59:27 AM.
1>InitializeBuildStatus:
1> Creating "Release\PROJ_NAME.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1> All outputs are up-to-date.
1> All outputs are up-to-date.
1>Lib:
1> All outputs are up-to-date.
1> PROJ_NAME.vcxproj -> C:\projFolder.PROJ_NAME.lib
1>FinalizeBuildStatus:
1> Deleting file "Release\PROJ_NAME.unsuccessfulbuild".
1> Touching "Release\PROJ_NAME.lastbuildstate".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.09
========== Build: 1 succeeded, 0 failed, 5 up-to-date, 0 skipped ==========
Любые идеи?
Ответы
Ответ 1
У меня была аналогичная проблема, когда один из включенных файлов, перечисленных в проекте, фактически не существовал. Я удалил файл, но забыл удалить его из проекта.
Затем проверка зависимостей полагает, что проект не обновлен, но строитель ничего не находит для сборки.
Ответ 2
У меня было два проекта, содержащих один и тот же файл. Когда второй проект был построен, он снова скомпилировал файл, изменив дату и время касания. Это, в свою очередь, установило флаг "AlwaysCreate" для первого проекта.
Я нашел это, включив "CPS" в моем файле "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config", как в приведенном ниже фрагменте xml. С помощью этой функции вы можете использовать инструмент DebugView для получения сообщений от VS2010, в которых указывается, ПОЧЕМУ он перестраивает ваш проект. Почему эти сообщения не входят в журнал сборки, выходят за меня, но в любом случае это так.
Добавьте это:
<system.diagnostics>
<switches>
<add name="CPS" value="4" />
</switches>
</system.diagnostics>
Здесь:
<?xml version ="1.0"?>
<configuration>
<configSections>
<section name="msbuildToolsets" type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</configSections>
<system.diagnostics>
<switches>
<add name="CPS" value="4" />
</switches>
</system.diagnostics>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319" />
Ответ 3
В соответствии с этим потоком в MSDN:
В моем случае в VS10 это произошло из-за отсутствия (но не выполнимых файлов .h, а значит, дополнительной ошибки для идентификации) в папках проекта.
Быстрая проверка того, что все файлы проекта могут открываться в редакторе, устраняет эту проблему.
Ответ 4
Вы также должны проверить другие файлы, кроме .h. В моем проекте Readme.txt был пропущен.
Ответ 5
Я переместил решение в новую папку, и каждый раз, когда я создавал новую версию или пытался отлаживать ее, он хотел бы утверждать, что все проекты, которые составляли решение, устарели, хотя он только что построил их.
Я искал все файлы .vcxproj, использовал DebugView с CPS = 4 (см. ответ @Bzzt выше) и обнаружил, что он ищет файлы заголовков в своем OLD-местоположении. Поскольку решение было перемещено, а не скопировано, эти файлы не существовали.
Что, наконец, решило это для меня, это очистка решения и выполнение одной перестройки. После этого "AlwaysCreate" больше не вызывал "сборку" всех субпроектов. Вы должны очищать каждую конфигурацию (отлаживать и выпускать) отдельно, но как только она была восстановлена из чистого состояния, все хорошо.
В моем случае он фактически не делал никакого здания, но MSBuild или все, что было принято, устарели, использовало некоторый кешированный путь к файлу, который больше не существовал. Clean и Rebuild заменили этот кеш, а затем он построил, как ожидалось
Ответ 6
У меня такая же проблема.
Корневая причина: неверная версия сборки VS (32 бит и 64 бит)
Решение: Режим переключения Отладка/отключение с 32 до 64 бит или наоборот
http://postimg.org/image/3jurey1qr/
Ответ 7
В Visual Studio 2010 я исключил ложные перестройки многопроектного решения, оставив Multiprocessor Compilation (/MP) отключенным (жалость!). Раньше я был включен. Найдите здесь флаг: Общие свойствa > C/С++ > Общие > Многопроцессорная компиляция. Кроме того, я заметил, что я смог устранить ложные перестройки отдельных проектов, перестраивая каждый проект индивидуально; то каждая из них показывала, что каждый из них обновлен.
Ответ 8
Чтобы заставить это работать, я просто переименовал свой существующий выходной каталог, чтобы воссоздать все промежуточные файлы (после проверки всех принятых выше ответов).
У меня был успех в прошлом с использованием DebugView в VS2010, чтобы найти файлы для удаления, но сегодня этот подход не сработал. Я не мог найти ЛЮБОЙ ссылки на отсутствующие файлы заголовков, найденные с использованием DebugView, в любом из моих файлов кода или файлов проекта XML. Я также извлек устаревшие файлы из TFS, чтобы попытаться с ними присутствовать и отсутствовать на моей машине.
Затем я использовал GREP для поиска всей моей директории решений, и единственные результаты были в двоичных файлах: старые файлы кода *.obj, файл проекта *.pdb и vc100.idb. Я не знаю, как эти файлы могут быть изменены/заменены во время сборки и перестройки, поэтому я не уверен, что предыдущая ссылка в одном из этих файлов была ответственна за утверждение старых файлов заголовков.
Надеюсь, это поможет кому-то по дороге, и спасибо за приведенную выше информацию, которая заставила меня начать!
Ответ 9
Для командной строки сборки msbuild.exe вы можете использовать /verbosity: подробно и искать вывод для
- "будет скомпилирован как" найти компиляции
- "Требуется исходная компиляция" для поиска ссылок
Примечание. Вывод может быть передан в файл с помощью msbuild.exe/verbosity: detail > output.txt
например.
code.cpp will be compiled as C:\path\to\header.h was modified at 18/02/2016 15:58:31.
Outputs for C:\path\to\code.cpp: