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

Visual Studio создает проекты каждый раз, когда я запускаю

У меня есть .NET-решение в Visual Studio 2010 с кучей проектов. До недавнего времени, когда я запускал проект запуска из среды IDE, проекты строились бы только в том случае, если бы изменения были внесены в код в проекте запуска или в одном из проектов зависимостей.

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

Несколько дополнительных частей информации - та же проблема начала происходить со всеми остальными в моей команде примерно в то же время, когда я начал испытывать эту проблему.

Мы также используем репозиторий исходного кода. Поскольку мы не меняли никаких настроек в Visual Studio, мое подозрение в том, что кто-то случайно поменял что-то в исходном коде для какого-то проекта, который теперь требует, чтобы все проекты строились каждый раз.

Приветствуются любые предложения.

4b9b3361

Ответ 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 и удалите все что угодно в поле "Описание".