Nano Hash - криптовалюты, майнинг, программирование

Множественные перестроения при выборе Debug | Запустить новый экземпляр

У меня есть большое решение Visual Studio 2010 (~ 110 проектов С#). Один проект (назовем его «А») представляет собой консольное приложение, которое имеет около 6 зависимостей от других проектов и некоторых сторонних сборок.

Если я создам проект «А», он создаст зависимости, как и ожидалось.

Если я щелкну правой кнопкой мыши проект «A» и выберу «Отладка | Запустите новый экземпляр, он сначала создаст проект, а затем приступит к сборке множества других проектов. Наблюдая за окном вывода, кажется, что он продолжает перезапускать процесс сборки для каждого из этих других проектов и их зависимостей.

Проблема в том, что исходный проект «А» не зависит от этих других проектов (прямо или косвенно), которые Visual Studio создает перед запуском отладчика.

Это означает, что запуск отладчика может занять целую вечность.

Я настроил файлы .csproj в некоторых других проектах, но не настроил проект «А».

Сборки командной строки через msbuild ведут себя нормально.

Что может заставить Visual Studio сделать это?


  • Вы нашли решение этой проблемы? У меня точно такая же проблема, и я уже потратил день, пытаясь решить эту проблему? 13.02.2013
  • Не полностью. Кажется, я частично обошел проблему, заново создав некоторые проекты с нуля (и добавив ссылки на проекты). Я сделал это, исходя из теории, что, возможно, некоторые метаданные в файле .sln были перепутаны. 14.02.2013

Ответы:


1

Это вызвано цепочкой ссылок MSBuild. Проект A зависит от проекта B, который зависит от проекта C, и так далее.

У вас есть несколько вариантов:

  1. По умолчанию новая ссылка сделана в текущем решении, отмеченном Copy Local=true. Этот процесс является одним из самых трудоемких при сборке. Иногда имеет смысл иметь только самые верхние проекты (файлы .exe) с локальным свойством копирования, поскольку проекты lib все равно не запускаются из своей собственной выходной папки.

  2. В решении Properties -> Configuration Properties - по умолчанию каждый проект помечен для сборки. Вы можете снять отметку о несвязанных проектах в файле build. Этот параметр будет сохранен в файле .sln, поэтому просто убедитесь, что вы не регистрируете эту модификацию — это может привести к сбою ваших сборок CI.

РЕДАКТИРОВАТЬ:

  • Для дальнейшего анализа процесса сборки увеличьте уровень детализации MSBuild: Tools > Options > Projects and Solutions > Build and Run > MSBuild project build output verbosity и установите значение Detailed или Diagnostic. Это поможет вам отслеживать нюансы сборки.
16.03.2012
  • Я понимаю цепочку ссылок, которую вы упомянули. Это имеет смысл, когда я делаю обычную сборку — зависимые проекты строятся, как и ожидалось. Чего я не ожидаю, так это того, что при выполнении экземпляра отладки он перестраивает несвязанные проекты. Почему цепочка ссылок должна отличаться при отладке по сравнению с обычной сборкой? 18.03.2012
  • См. обновление, чтобы узнать, как анализировать выходные данные сборки. В основном VS имеет встроенный механизм для обнаружения изменений. Эта функция соответствует концепции, известной как добавочная сборка. Вот соответствующий пост. 18.03.2012
  • Да, хорошее предложение. Одна проблема с этим сценарием сборки заключается в том, что каждый раз, когда он перезапускает процесс сборки для этих других проектов, он также очищает окно вывода. Таким образом, вы получаете вывод сборки только для последней построенной зависимости — все предыдущие теряются. И чтобы было ясно, все эти несколько процессов сборки происходят последовательно после того, как вы выполните один «Отладка запуска нового экземпляра». 19.03.2012
  • Вы можете сохранить выходные данные IDE, запустив devenv из командной строки: devenv your.sln /build Debug /out vside.log 19.03.2012
  • Не хорошо. Это просто сборка из командной строки — точно так же, как сборка решения из VS. Сценарий, который я описываю, происходит только тогда, когда вы щелкаете правой кнопкой мыши проект в решении и выбираете «Отладка запуска нового экземпляра». 19.03.2012
  • Вы можете попробовать rundevenv /run your.csproj /out vside.log 19.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..