Visual Studio создает проекты каждый раз, когда я запускаю
У меня есть .NET-решение в Visual Studio 2010 с кучей проектов. До недавнего времени, когда я запускал проект запуска из среды IDE, проекты строились бы только в том случае, если бы изменения были внесены в код в проекте запуска или в одном из проектов зависимостей.
Около двух недель назад я заметил, что каждый раз, когда я запускаю проект запуска, Visual Studio строит все проекты, что занимает около семи минут. Излишне говорить, что это занимает много времени с моего рабочего дня, и я изо всех сил старался найти онлайн решения, но еще не нашел решения, которые отвечают моей конкретной проблеме.
Несколько дополнительных частей информации - та же проблема начала происходить со всеми остальными в моей команде примерно в то же время, когда я начал испытывать эту проблему.
Мы также используем репозиторий исходного кода. Поскольку мы не меняли никаких настроек в Visual Studio, мое подозрение в том, что кто-то случайно поменял что-то в исходном коде для какого-то проекта, который теперь требует, чтобы все проекты строились каждый раз.
Приветствуются любые предложения.
Ответы
Ответ 1
Причиной может быть много вещей, поэтому без ваших решений + проектов мы можем только догадываться.
Типичным способом обработки этой проблемы является сужение ее с помощью двоичного поиска. То есть
- Я все строю.
- Далее я нахожу что-то посреди порядка сборки и создаю этот проект. Если что-то, от чего зависит этот проект, является виновником, вы столкнетесь с этой проблемой. Если что-то, от чего оно не зависит, проблема не будет (т.е. Скажет, что все проекты пропущены).
- Теперь вы повторяете этот процесс, пока не сузите его (надеюсь) проект, который вызвал проблему.
Это (конечно) работает только в том случае, если есть один проект, который ввел новую проблему (что, вероятно,).
Один из виновников моей конкретной ситуации заключался в том, что ссылка на проект x64 на проект x86 не была выбрана для конфигурации x64.
Ответ 2
Я расскажу о лучшем ответе, который я нашел здесь, в stackoverflow и в сочетании с принятым ответом на матовый smith, я достиг основной причины моей проблемы:
Конфигурируя Visual Studio для записи результата сборки с помощью метода "Диагностика", как объясняется в этом ответе: fooobar.com/questions/101018/..., самая первая строка на выходе объясняет, почему MSBuild решает перестроить проект.
Итак, если у вас есть, скажем, 3 проекта в решение:
- Library0
- Library1
- Применение
ссылается на этот путь: Ссылки на приложения Library1 и эта ссылка на Library0. Выбрав "Build" для проекта Application, первый раз он должен построить все указанные проекты в порядке. Но отныне, если никаких изменений не было сделано, нажатие "Build" не должно строить ничего, потому что MSBuild обнаруживает, что изменения там не были сделаны. Должен отображаться аналогичный вывод журнала:
========== Build: 0 удалось, 0 не удалось, 3 обновлено, 0 пропущено ==========
Но теперь, если внесенные изменения, если у вас есть выходной уровень журнала MSBuild в "Диагностике", первая строка в окне вывода отобразит причину того, почему Visual Studio решает построить проект, например:
Project 'Library0' не обновляется. Входной файл 'c:\Library0\Class1.cs' изменяется после выходного файла 'c:\Library0\bin\Debug\Library0.pdb'.
Ответ 3
Перейдите в Инструменты → Параметры → Проект и решения → Построить и запустить.
Посмотрите варианты там. "Необходимо только создавать проекты запуска и зависимости от Run".
Кроме того, вы можете установить вывод сборки (на том же экране параметров) в "Детальный или Диагностический", чтобы узнать, можете ли вы найти какие-либо подсказки, почему проекты создаются каждый раз.
Ответ 4
В моем опыте с этой проблемой только некоторые из проектов, которые были перестроены, и перестройки не удалось несколько раз, прежде чем, наконец, преуспели. По-видимому, это вызвано повреждением файла \rootprojectdir\.vs\%projectname%\v14\.suo
. Это также заставило те же проекты требовать перестройки, и те же окна, которые нужно открывать каждый раз, когда я открывал VS. Удаление файла .suo(в то время как VS был закрыт) и повторное открытие VS фиксировало его:)
Ответ 5
Инструменты → Параметры → Проект и решения → Сборка и запуск
Задайте свой вывод в разделе "Диагностика". После выполнения другой сборки просмотрите окно вывода. В начале каждой сборки проекта система сборки сообщит вам, какая зависимость вызывает создание проекта.
(В моем случае это был файл .ico, который случайно получил значение Build Action: Resource
и Copy To Output: Copy if newer
. Очень сложно найти.)
Ответ 6
Если Visual Studio требует полной сборки каждый раз, когда я сначала проверяю свои настройки (уже упоминалось), а затем я проверю условия, которые использует VS, чтобы определить, что нужно построить. Я знаю, что VS проверяет временные метки во всех входных файлах при проверке того, что нужно построить. Я видел случаи, когда связанный сгенерированный файл заставляет всех нисходящих иждивенцев строить каждый раз, хотя содержимое сгенерированного файла было одинаковым. Здесь ссылка на инкрементные сборки MSDN.
http://msdn.microsoft.com/en-us/library/ms171483.aspx
Я не уверен, существуют ли другие условия, которые VS использует для определения проектов, которые необходимо построить.
Ответ 7
Я приземлился здесь в поисках решения моей собственной ситуации, и ни один из ответов не дал исправления.
После исследования я обнаружил ситуацию, когда проекты UWP компилируются каждый раз, если Copy to Output Directory
свойства " Copy to Output Directory
задано значение " Copy always
Copy if newer
или " Copy if newer
в файлах xaml
. В прошлом это помогло бы решить некоторые проблемы компиляции, однако, поскольку в этих файлах введены значения xbf
эти значения вынуждают Visual Studio перекомпилироваться каждый раз, даже если в исходный код не вносятся изменения.
Я написал в блоге об этом: Предотвращение перекомпиляции Visual Studio в UWP
Я надеюсь, что это помогает кому-то.
Ответ 8
У MSBuild может быть много причин обнаружить необходимость перестроить проект.
В моем случае у меня есть куча событий Pre-build, которые генерируют код из файлов XSD. Это приводит к тому, что проект будет перестраиваться каждый раз. И тогда будут перестроены и другие проекты в зависимости от этого.
Ответ 9
TargetFramework в .csproj против поддерживаемого Runtime-sku в app.config
Просто найти другую причину для перестроений (по крайней мере, с новыми файлами проекта СДК-стиль, не пробовал для "старого стиля" проектов): если TargetFramework
элемент в файле .csproj не соответствует СКУ-атрибут supportedRuntime
-entry в app.config, visual studio также будет перестраивать проект каждый раз.
Например, нацеливание на 4.6.2 в .csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
</PropertyGroup>
</Project>
против 4.6.1, указанного в app.config
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>
вызовет восстановление.
Ответ 10
Следующее сработало для меня. Перейдите на Properties-> Custom_Build_Step и удалите все что угодно в поле "Описание".