Build monitor visual studio что это
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Как Visual Studio создает контейнерные приложения
Независимо от того, выполняете ли вы сборку из интегрированной среды разработки Visual Studio или настраиваете сборку из командной строки, необходимо знать, как в Visual Studio используется файл Dockerfile для сборки проектов. В целях повышения производительности в Visual Studio для контейнерных приложений применяется особый процесс. Особенно важно понимать, как Visual Studio выполняет сборку проектов, когда процесс сборки настраивается путем изменения Dockerfile.
Когда в Visual Studio выполняется сборка проекта, который не использует контейнеры Docker, на локальном компьютере вызывается MSBuild и создаются выходные файлы в папке (обычно bin ), вложенной в локальную папку решения. Однако для контейнерного проекта в процессе сборки учитываются инструкции из файла Dockerfile. Сборка с помощью Dockerfile в Visual Studio делится на несколько этапов. При этом применяется функция многоэтапной сборки Docker.
При многоэтапной сборке образы контейнеров создаются в несколько шагов, на каждом из которых формируются промежуточные образы. Возьмем для примера типичный файл Dockerfile, создаваемый Visual Studio. Первый этап — base .
Следующий этап — build . Выглядит он так:
Как вы видите, на этапе build вместо продолжения работы с образом base берется другой исходный образ из реестра ( sdk , а не aspnet ). Образ sdk содержит все средства сборки и поэтому гораздо больше, чем образ aspnet, который содержит только компоненты времени выполнения. Причина использования отдельного образа становится очевидной, если посмотреть на остальную часть файла Dockerfile:
Последний этап снова начинается с образа base и включает в себя команду COPY --from=publish , которая копирует опубликованные выходные данные в итоговый образ. Это позволяет значительно уменьшить итоговый образ, так как в него не нужно включать все средства сборки, которые имелись в образе sdk .
Сборка из командной строки
Если нужно выполнить сборку вне Visual Studio, можно использовать docker build или MSBuild для построения из командной строки.
Чтобы выполнить сборку образа для одного проекта контейнера Docker, можно использовать MSBuild с параметром команды /t:ContainerBuild . Пример:
Выходные данные будут аналогичны тем, которые содержатся в окне Выходные данные при сборке решения из интегрированной среды разработки Visual Studio. Всегда используйте /p:Configuration=Release , так как при применении оптимизации многоэтапной сборки в Visual Studio результаты сборки в конфигурации отладки могут отличаться от ожидаемых. См. раздел Отладка.
Для проекта Docker Compose используйте команду для сборки образов:
Под прогревом проекта понимается последовательность действий, которая выполняется при выборе профиля Docker для проекта (то есть при загрузке проекта или добавлении поддержки Docker) с целью оптимизировать его производительность при последующих запусках (F5 или CTRL+F5). Для настройки этого процесса можно выбрать Инструменты > Параметры > Инструменты для контейнера. Ниже описываются задачи, которые выполняются в фоновом режиме:
- Проверка установки и запуска Docker Desktop.
- Проверка того, что для Docker Desktop и проекта задана одна и та же операционная система.
- Извлечение образа на первом этапе файла Dockerfile (этап base в большинстве файлов Dockerfile).
- Создание файла Dockerfile и запуск контейнера.
Прогрев будет выполняться только в быстром режиме, поэтому в работающем контейнере папка приложения будет подключена к тому. Это означает, что любые изменения в приложении не сделают контейнер недействительным. Таким образом, значительно повышается эффективность отладки и сокращается время ожидания для длительных задач, таких как извлечение крупных образов.
Чтобы реализовать отладку в контейнерах, Visual Studio использует сопоставление томов для сопоставления отладчика и папок NuGet с хост-компьютера. Сопоставление томов описано в документации по Docker. Сопоставления томов для контейнера можно просмотреть с помощью окна "Контейнеры" в Visual Studio.
Ниже перечислены тома, которые подключаются в контейнере:
Громкость | Описание |
---|---|
Удаленный отладчик | Содержит компоненты, необходимые для запуска отладчика в контейнере, в соответствии с типом проекта. Это объясняется более подробно в разделе Отладка. |
Папка приложения | Содержит папку проекта, в которой располагается файл Dockerfile. |
Исходная папка | Содержит контекст сборки, который передается в команды Docker. |
Папки пакетов NuGet | Содержат пакеты NuGet и резервные папки, которые считываются из файла obj.csproj.nuget.g.props в проекте. |
С помощью средства dev-certs проверяется наличие доверенного сертификата разработки на хост-компьютере.
Том подключает следующие каталоги:
Если конфигурация поддерживает как контейнерные, так и неконтейнерные сборки, следует использовать переменные среды, так как пути зависят от среды контейнеров.
Если сборка выполняется в режиме отладки, Visual Studio осуществляет ряд оптимизаций, которые повышают производительность сборки для контейнерных проектов. При этом процесс сборки контейнерных приложений не просто следует инструкциям в файле Dockerfile. Сборка в контейнере выполняется гораздо медленнее, чем на локальном компьютере. Поэтому при сборке в конфигурации отладки Visual Studio на самом деле выполняет сборку проектов на локальном компьютере, а затем предоставляет доступ к папке с выходными данными контейнеру путем подключения к тому. Сборка с такой оптимизацией называется сборкой в быстром режиме.
В быстром режиме Visual Studio вызывает docker build с аргументом, который предписывает Docker выполнить сборку только образа base . Остальные этапы процесса выполняет сама среда Visual Studio с учетом содержимого Dockerfile. Поэтому, когда вы изменяете файл Dockerfile, например для настройки среды контейнера или установки дополнительных зависимостей, изменения должны вноситься на первом этапе. Шаги, добавленные в этапы build , publish и final в Dockerfile, выполняться не будут.
Данная оптимизация производительности применяется только при сборке в конфигурации отладки. В конфигурации выпуска сборка выполняется в контейнере, как указано в Dockerfile.
Чтобы отключить оптимизацию производительности и выполнить сборку, как указано в Dockerfile, присвойте свойству ContainerDevelopmentMode значение Regular в файле проекта следующим образом:
Чтобы снова включить оптимизацию производительности, удалите это свойство из файла проекта.
При запуске отладки (F5) используется ранее запущенный контейнер, если это возможно. Если вы не хотите повторно использовать имеющийся контейнер, можно выбрать в Visual Studio команду Перестроить или Очистить, чтобы использовался новый контейнер.
Процесс запуска отладчика зависит от типа проекта и операционной системы контейнера:
Точка входа контейнера
Visual Studio использует подходящую точку входа контейнера в зависимости от типа проекта и операционной системы контейнера. Ниже описываются возможные комбинации:
Точку входа контейнера можно изменить только в проектах docker-compose. В проектах с одним контейнером сделать это нельзя.
Узнайте, как произвести дальнейшую настройку сборок путем задания дополнительных свойств MSBuild в файлах проекта. См. статью Свойства MSBuild для проектов контейнеров.
В этой статье описаны функции для опытных разработчиков или разработчиков, которые уже знакомы с Visual Studio. Основные сведения о Visual Studio см. в статье Обзор интегрированной среды разработки Visual Studio.
Модульная установка
Модульный установщик Visual Studio позволяет выбирать и устанавливать требуемые рабочие нагрузки. Рабочие нагрузки — это группы функций, которые должны работать в языках программирования или платформах. Такая модульная стратегия сокращает объем установки Visual Studio, ускоряя установку и обновление среды.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Дополнительные сведения о настройке Visual Studio в своей системе см. в статье Установка версии-кандидата Visual Studio.
Создание приложений Azure с поддержкой облака
Visual Studio предлагает набор инструментов, которые позволяют без усилий создавать облачные приложения на базе Microsoft Azure. Вы можете настраивать, создавать, отлаживать, упаковывать и развертывать приложения и службы Azure непосредственно из интегрированной среды разработки (IDE) Visual Studio. Чтобы получить инструменты Azure и шаблоны проектов, при установке Visual Studio выберите рабочую нагрузку Разработка для Azure.
В Visual Studio вы можете использовать Cloud Explorer для просмотра и администрирования облачных ресурсов на основе Azure. К облачным ресурсам относятся виртуальные машины, таблицы и базы данных SQL. Cloud Explorer отображает ресурсы Azure во всех учетных записях в пределах подписки Azure, в которую вы вошли. Если для выполнения операции требуется портал Azure, Cloud Explorer отобразит ссылки для перехода в нужное расположение на портале.
В Visual Studio 2022 окно Cloud Explorer отсутствует. Дополнительные сведения см. в статье Управление ресурсами, связанными с учетными записями Azure, с помощью Visual Studio Cloud Explorer.
При необходимости используйте портал Azure для доступа к ресурсам Azure. Вы можете продолжить использовать узел Azure Cloud Explorer в предыдущих версиях Visual Studio.
Вы можете использовать службы Azure для приложений с помощью Подключенных служб:
-
позволяет использовать учетные записи Azure Active Directory для подключения к веб-приложениям. — хранилище больших двоичных объектов, очереди и таблицы. служит для управления секретами для веб-приложений.
Доступные Подключенные службы зависят от типа проекта. Добавьте службу, щелкнув проект в Обозревателе решений правой кнопкой мыши и выбрав Добавить > Подключенная служба.
На экране Подключенные службы выберите ссылку или знак "+", чтобы добавить зависимость службы. На экране Добавление зависимости выберите службу, которую нужно добавить, и следуйте инструкциям, чтобы подключиться к подписке и службе Azure.
Создание веб-приложений
Дополнительные сведения см. на странице со сведениями о современных инструментах для создания веб-приложений.
Создание кроссплатформенных приложений и игр
С помощью Visual Studio вы можете создавать приложения и игры для macOS, Linux и Windows, а также для мобильных устройств Android, iOS и пр. С помощью Visual Studio вы можете выполнять сборку:
собственных приложений C++ для устройств iOS, Android и Windows. Предоставляйте доступ к общему коду в библиотеках для iOS, Android и Windows с помощью C++ для кроссплатформенной разработки.
Подключение к базам данных
Обозреватель объектов SQL Server позволяет просматривать объекты баз данных так же, как и в среде SQL Server Management Studio. Обозреватель объектов SQL Server позволяет выполнять простые действия для администрирования и проектирования баз данных. Примеры включают редактирование данных в таблицах, сравнение схем и выполнение запросов с помощью контекстных меню.
Чтобы открыть обозреватель объектов SQL Server, щелкните его значок в верхней части окна Обозреватель сервера или выберите Вид>Обозреватель объектов SQL Server в меню Visual Studio сверху.
SQL Server Data Tools (SSDT) — это мощная среда разработки для SQL Server, базы данных SQL Azure и хранилища данных SQL Azure. С помощью SSDT вы можете создавать, отлаживать и обслуживать базы данных, а также выполнять их рефакторинг. Можно работать с проектом базы данных или напрямую с подключенным экземпляром базы данных (локально или удаленно). Чтобы получить SSDT, используйте Visual Studio Installer для установки рабочей нагрузки Хранение и обработка данных.
Отладка, тестирование и совершенствование кода
Когда вы пишете код, вы должны запустить и протестировать его на предмет ошибок и производительности. Система отладки Visual Studio позволяет отлаживать код в локальном проекте, на удаленном устройстве или в эмуляторе устройства. Вы можете просматривать код с шагом в один оператор, проверяя значения переменных. Или вы можете задать точки останова, которые срабатывают только при выполнении указанного условия. Параметрами отладки можно управлять в самом редакторе кода, не выходя из окна с кодом.
Дополнительные сведения об отладке в Visual Studio см. в статье Знакомство с отладчиком.
Чтобы повысить производительность приложения, ознакомьтесь с функцией профилирования в Visual Studio.
Для тестирования в Visual Studio предусмотрены такие возможности, как модульное тестирование, Live Unit Testing, IntelliTest, а также тестирование производительности и нагрузочное тестирование. Visual Studio также предоставляет расширенные возможности анализа кода для выявления ошибок конструктора, проблем с безопасностью и прочих дефектов.
Развертывание готового приложения
Visual Studio содержит средства для развертывания приложения для пользователей или клиентов с помощью Microsoft Store, сайта SharePoint, InstallShield или установщика Windows. Доступ ко всем этим вариантам можно получить через Visual Studio IDE. Дополнительные сведения см. в статье Общие сведения о развертывании в Visual Studio.
Управление исходным кодом и совместная работа
В Visual Studio вы можете управлять исходным кодом в репозиториях Git, размещенных любым поставщиком, включая GitHub. Также вы можете здесь найти сервер Azure DevOps Server для подключения.
Дополнительные сведения см. в статье Интерфейс Git в Visual Studio и на странице навигации документации по управлению версиями Visual Studio. Пошаговое руководство по подключению к репозиторию Git или Azure DevOps с помощью Visual Studio см. в руководстве Открытие проекта из репозитория.
Мы постоянно продолжаем развивать набор функций Git в цикле разработки с учетом ваших отзывов. Дополнительные сведения о недавно обновленных компонентах и ссылки на опрос, через который вы можете оставить свой отзыв, см. в записи блога, посвященной поддержке нескольких репозиториев в Visual Studio.
Способ открывать проекты из репозитория GitHub с помощью Visual Studio 2019 зависит от версии. В частности, если вы установили версию 16.8 или более позднюю, вам доступны новые полностью интегрированные возможности Git. Дополнительные сведения см. на странице документации по управлению версиями Visual Studio.
Пошаговое руководство по подключению к репозиторию Git или Azure DevOps с помощью Visual Studio см. в руководстве Открытие проекта из репозитория.
Дополнительные сведения об управлении репозиториями Git в Visual Studio с помощью Team Explorer см. в статье Начало работы с Git и Azure Repos. Дополнительные сведения о встроенных функциях управления версиями Visual Studio см. в записи блога, посвященной функциям Git в Visual Studio.
Azure DevOps Services — это облачные службы для планирования, размещения, автоматизации и развертывания программного обеспечения, а также совместной работы в группах. Службы DevOps Services поддерживают распределенное управление версиями в GitHub и централизованное управление версиями в системе управления версиями Team Foundation (TFVC). Они также поддерживают конвейеры непрерывной сборки и поставки (CI/CD) кода, хранимого в системах управления версиями. Службы DevOps Services также поддерживают методологии разработки программного обеспечения Agile, Scrum и CMMI. С помощью DevOps Services вы можете управлять кодом, а также ошибками и рабочими элементами для всего проекта.
Team Foundation Server (TFS) — это центр управления жизненным циклом приложений для Visual Studio. Он позволяет всем лицам, участвующим в процессе разработки, использовать единое решение. TFS также полезен для управления разнородными командами и проектами.
Вы можете подключиться к организации Azure DevOps или Team Foundation Server в сети через окно Team Explorer в Visual Studio. В окне Team Explorer можно извлекать код из системы управления версиями и возвращать его туда, управлять рабочими элементами, запускать сборки, а также получать доступ к комнатам команд и рабочим областям. Чтобы открыть Team Explorer, используйте поле поиска или выберите Вид > Team Explorer.
На изображении ниже показано окно Team Explorer для решения, размещенного в Azure DevOps Services.
Azure DevOps — это центр управления жизненным циклом приложений для Visual Studio. Azure DevOps позволяет всем лицам, участвующим в процессе разработки, использовать единое решение. Azure DevOps также используется для управления разнородными командами и проектами.
Вы можете подключиться к организации Azure DevOps или Azure DevOps Server в сети через окно Team Explorer в Visual Studio. В окне Team Explorer можно извлекать код из системы управления версиями и возвращать его туда, управлять рабочими элементами, запускать сборки, а также получать доступ к комнатам команд и рабочим областям. Чтобы открыть Team Explorer, используйте поле поиска или выберите Вид > Team Explorer.
Вы также можете автоматизировать процесс сборки, чтобы обеспечить сборку кода, который разработчики возвращают в систему управления версиями. Например, вы можете создавать один или несколько проектов каждую ночь или всякий раз при записи кода после изменения. Дополнительные сведения см. в описании Azure Pipelines.
Дальнейшие действия
Если в Visual Studio нет необходимой вам функции, ее можно добавить. Вы также можете персонализировать IDE с учетом своего рабочего процесса и стиля, включить поддержку внешних инструментов, которые еще не интегрированы с Visual Studio, а также изменить существующие функции, чтобы повысить производительность. Сведения о последней версии средств расширения Visual Studio (VS SDK) см. в статье Пакет SDK Visual Studio.
Вы также можете найти существующие расширения для Visual Studio, созданные разработчиками Майкрософт и сообществом разработчиков Visual Studio.
С помощью Visual Studio 2019 вы получите лучшие в своем классе средства и службы для любого разработчика, любого приложения и любой платформы. Независимо от того, сколько времени вы уже используете Visual Studio, в текущей версии вы найдете много интересного для себя.
Обзор новых возможностей
- Разработка. Сосредоточьтесь на главном и повышайте продуктивность благодаря оптимизированной производительности, возможности мгновенной очистки кода и более точным результатам поиска.
- Совместная работа. Воспользуйтесь возможностями совместной работы в рамках рабочего процесса Git-first, функциями редактирования и отладки, а также рецензирования кода прямо в Visual Studio.
- Отладка. Выделяйте определенные значения и переходите к ним; оптимизируйте использование памяти и создавайте автоматические моментальные снимки при выполнении вашего приложения.
Разработка
Посмотрите видео ниже, чтобы узнать, как вы можете экономить время благодаря новым возможностям.
Длительность видео: 3:00 мин.
Улучшенный поиск
Новый интерфейс поиска, ранее называвшийся "Быстрый запуск", стал быстрее и эффективнее. Теперь результаты поиска отображаются динамически при вводе запроса. Результаты поиска часто включают сочетания клавиш для команд, что упрощает их запоминание для использования в будущем.
Новая логика поиска нечетких соответствий поможет вам найти все, что вам требуется, независимо от наличия опечаток. Новая функция поиска упрощает поиск команд, параметров, документации и многих других полезных вещей.
Интеллектуальная служба поиска
Новые возможности в версии 16.9: с помощью технологий на основе облака, ИИ и машинного обучения мы улучшили результативность поиска. Теперь поиск Visual Studio не только предоставляет более релевантные результаты, но и помогает вам быстрее найти информацию о функциях продуктов.
Дополнительные сведения см. в записи блога об интеллектуальной службе поиска в Visual Studio.
Рефакторинг
Быстро вызывайте операции рефакторинга, нажав клавиши CTRL+. и выбрав требуемое действие.
IntelliCode
Visual Studio IntelliCode повышает эффективность разработки программного обеспечения с помощью искусственного интеллекта (ИИ). Для создания рекомендаций IntelliCode анализирует 2000 проектов с открытым кодом на GitHub (—каждый из которых имеет более 100 звезд—).
Ниже приведено несколько примеров того, как Visual Studio IntelliCode может помочь повысить производительность:
- обеспечивает контекстно зависимое завершение кода;
- помогает разработчикам придерживаться шаблонов и стилей написания кода в команде;
- выполняет поиск трудновыявляемых ошибок в коде;
- при проверке обращает внимание на те участки кода, которые действительно требуют проверки.
Очистка кода
Новый индикатор работоспособности документа дополнен новой командой очистки кода. Эту новую команду можно использовать для определения и устранения предупреждений и предложений одним действием или одним нажатием кнопки.
Функция очистки выполнит форматирование кода и применит исправления согласно текущим параметрам и файлам editorconfig.
Вы также можете сохранять наборы исправлений как профили. Например, если у вас есть небольшой набор целевых исправлений, которые часто применяются при написании кода, а также другой полный набор исправлений, которые применяются перед проверкой кода, вы можете настроить разные профили для решения этих задач.
Отрисовка, учитывающая параметры монитора (PMA)
Если вы используете мониторы, на которых настроены разные коэффициенты масштабирования отображения, или удаленно подключаетесь к компьютеру, коэффициенты масштабирования отображения которого отличаются от основного устройства, вы можете заметить, что изображение Visual Studio выглядит размытым или отображается с некорректным масштабом.
В выпуске Visual Studio 2019 мы реализуем отрисовку, учитывающую параметры монитора (PMA). Теперь Visual Studio правильно отображается независимо от того, какие используются коэффициенты масштабирования отображения.
Дополнительные сведения см. в записи блога Better multi-monitor experience with Visual Studio 2019 (Улучшенная работа с несколькими мониторами в Visual Studio 2019).
Обозреватель тестов
Новые возможности в 16.2. Мы обновили обозреватель тестов и улучшили работу с крупными наборами тестов, упростили фильтрацию, усовершенствовали обнаружение команд, добавили представления списка воспроизведения со вкладками, а также настраиваемые столбцы для отображения информации о тестах.
Совместная работа
Посмотрите видео ниже, чтобы узнать, как решать проблемы совместно с другими специалистами.
Длительность видео: 4:22 мин.
Рабочий процесс Git-first
Первое, что вы заметите при открытии Visual Studio 2019, — новое окно запуска.
С помощью этого окна запуска можно быстро перейти к коду несколькими способами. Мы включили возможность клонирования или извлечения кода из репозитория.
Окно запуска также позволяет открыть проект, решение и локальную папку или создать новый проект.
Производительность Git
Новые возможности в версии 16.8: Теперь GIT является интерфейсом системы управления версиями по умолчанию в Visual Studio 2019. Мы разработали набор функций на основе ваших отзывов за два прошлых выпуска. Теперь новый интерфейс включен по умолчанию для всех пользователей. В новом меню Git можно клонировать, создавать или открывать репозитории. Используйте интегрированные окна инструментов Git для фиксации и отправки изменений в код, управления ветвями, отслеживания изменений удаленных репозиториев и разрешения конфликтов слияния.
Дополнительные сведения см. в статье Новый интерфейс в Visual Studio.
Live Share
Visual Studio Live Share — это служба для разработчиков, которая позволяет предоставить базу кода и соответствующий контекст коллеге и обеспечить двунаправленное взаимодействие непосредственно из среды Visual Studio. Благодаря Live Share коллега может легко и безопасно просматривать, изменять и отлаживать проект, предоставленный вами для общего доступа.
В Visual Studio 2019 эта служба устанавливается по умолчанию.
Интегрированная проверка кода
Мы представляем новое расширение, которое можно скачать для использования в Visual Studio 2019. С помощью этого нового расширения можно просматривать, запускать и даже выполнять отладку запросов на вытягивание, не выходя из Visual Studio. Мы включили поддержку кода в репозиториях GitHub и DevOps в Azure.
Отладка
Посмотрите видео ниже, чтобы узнать, как быстро находить проблемный код при отладке.
Длительность видео: 3:54 мин.
Повышение производительности
Благодаря тому, что в Visual Studio 2019 обработка символов является внепроцессной, разработчики крупных приложений C++ могут выполнять отладку приложений, не испытывая проблем, связанных с нехваткой памяти.
Поиск во время отладки
Наверное, вам приходилось искать одну строку из набора значений в окне контрольных значений. В Visual Studio 2019 мы добавили поиск в окнах "Контрольные значения", "Локальные" и "Видимые", чтобы помочь вам быстрее находить нужные объекты и значения.
Также можно выбрать формат отображения значения в окнах "Контрольные значения", "Локальные" и "Видимые". Выберите (дважды щелкнув) один из элементов в любом окне и добавьте запятую (",") для доступа к раскрывающемуся списку спецификаторов формата, каждый из которых включает описание предполагаемого результата.
Дополнительные сведения см. в статье Enhanced in Visual Studio 2019: Search for Objects and Properties in the Watch, Autos, and Locals Windows (Улучшения в Visual Studio 2019: поиск объектов и свойств в окнах "Контрольные значения", "Видимые" и "Локальные").
Отладчик моментальных снимков
Получайте моментальные снимки при выполнении приложения в облаке, чтобы в точности знать, что происходит. (Эта возможность доступна в только в Visual Studio Enterprise.)
Поддержка Microsoft Edge Insider
Новые возможности в 16.2. Вы можете задать точку останова в приложении JavaScript и начать сеанс отладки с помощью браузера Microsoft Edge Insider. При этом в Visual Studio откроется новое окно браузера с включенной отладкой, с помощью которого можно пошагово выполнять приложения JavaScript в Visual Studio.
Инструмент "Закрепляемые свойства"
Новые компоненты в версии 16.4: Теперь можно легко находить объекты по их свойствам при отладке с помощью нового инструмента "Закрепляемые свойства". Просто наведите указатель мыши на свойство, которое нужно отобразить в окне отладчика в окне просмотра, автоматических действий и локальных действий, а затем щелкните значок закрепления. После этого в верхней части окна сразу же появится нужная информация.
Дальнейшие действия
Мы часто добавляем в Visual Studio новые функции, облегчающие разработку. Узнать подробнее о последних новшествах можно из блога о Visual Studio. Ретроспективный список нововведений, появившихся в предварительных версиях, можно посмотреть в разделе Заметки о предварительных выпусках. Список планируемых к выпуску возможностей см. в разделе Стратегия развития Visual Studio.
Между тем, вот над чем идет работа сейчас.
Доработанный интерфейс Git в Visual Studio 2019
Хотя инструмент управления версиями Git используется по умолчанию в Visual Studio 2019 версии 16.8 и более поздних версий, мы продолжаем добавлять функции для улучшения работы в новейшем выпуске Visual Studio 2019, версии 16.11.
Дополнительные сведения см. на странице Управление версиями в Visual Studio.
Среда Visual Studio 2022 уже доступна
Новая версия Visual Studio 2022 быстрее, удобнее в работе и проще. Кроме того, впервые Visual Studio стала 64-битной.
Ссылку для загрузки и дополнительную информацию см. в записи блога Visual Studio 2022 Vision, а также в записи блога Теперь доступна Visual Studio 2022 Preview 3.
Обратная связь
Зачем отправлять отзыв группе Visual Studio? Потому что мы серьезно относимся к отзывам клиентов. Они влияют на многие наши действия.
Если вы хотите внести предложение по улучшению Visual Studio, это можно сделать с помощью средства Предложить функцию.
Если возникает проблема с зависанием или аварийным завершением работы Visual Studio либо иная проблема с производительностью, вы легко можете сообщить нам шаги для воспроизведения проблемы и поделиться вспомогательными файлами с помощью средства Сообщить о проблеме.
There’s seeing your build, and then there’s REALLY seeing your build. The difference can be quite dramatic, unveiling a new world of possibilities. As part of a partnership between IncrediBuild and Visual Studio, you can enjoy these possibilities directly within Visual Studio.
We previously discussed IncrediBuild, a software acceleration technology that speeds up your builds, tests, and other development process times. While IncrediBuild’s solution is known mainly for its impressive development acceleration capabilities, there’s another, very interesting capability to take note of: IncrediBuild’s Build Monitor tool. This elegant build visualization tool replaces your old text output with a sleek, intuitive graphic UI, transforming your build into a visual entity you can easily engage with, and helps you spot long durations, errors, warnings, bottlenecks, and dependencies.
Let’s take a look at the standard text output we’re all used to working with:
Now take a look at how a build looks like with IncrediBuild’s Build Monitor tool, seamlessly integrated into the Visual Studio experience (see additional information about invoking IncrediBuild’s Build Monitor from within Visual Studio at the bottom of the post):
Each color represents the build task status, allowing you to immediately identify which build tasks were executed without a problem and which require your attention. The bar width represents the duration of a specific task, and the side navigation bar lays out the specific machine and core on which the task was executed.
However, that’s not all there is to it. This tool also includes:
- Customization capabilities – the build top graph is customizable, enabling you to keep track of relevant performance indicators such as CPU usage, tasks ready to be executed, memory usage, I/O, and much more.
- Replay – You can replay your build process to examine how it performed and share it with team
- Gaps detection – You can improve your build quality by quickly detecting tasks with long durations, errors, warnings, bottlenecks, unneeded dependencies, gaps, and more.
- Display types – You can switch between display types:
- Progress display – This is the colorful display discussed above
- Projects display – Allows you to distinguish between each project’s/configuration’s standard output, along with a status bar representing the project’s build status.
If you want to see a more vivid demonstration of this tool, here’s a demo video of IncrediBuild’s Build Monitor tool.
Visualizing and speeding up your build
IncrediBuild’s Build Monitor tool comes hand in hand with IncrediBuild’s main benefit: its ability to highly accelerate C++ builds by enabling you to use the idle CPU cycles of other machines in your network, effectively transforming each local machine or build server into a virtual super computer with dozens of cores. We’ve discussed IncrediBuild’s effect on build times while building on even a single development machine in a previous blog post. However, to realize IncrediBuild’s full potential, and take advantage of its entire acceleration capabilities, it is recommended to deploy it on more machines and cores. Simply connect your colleagues’ IncrediBuild Agents with yours and each of you will be able to seamlessly use the aggregated idle CPU power of all the machines connected together.
Visual Studio 2019 allows you to leverage these capabilities free of charge (for your local machine) and get a real speed boost on your software development.
How to install IncrediBuild from the Visual Studio Installer
Once you have downloaded the Visual Studio 2019 installer, IncrediBuild is presented as an optional component for C++ workloads.
After checking the IncrediBuild checkbox your Visual Studio installation will come with an Incredibuild submenu under the “Extensions” menu.
For further information regarding installing IncrediBuild from within Visual Studio please visit IncrediBuild on Visual Studio Marketplace.
How to invoke the Build Monitor display (as well as IncrediBuild acceleration capabilities) from within Visual Studio 2019
After installing IncrediBuild within Visual Studio, you’ll have the Build Monitor display available to you upon initiating a build using IncrediBuild.
To initiate a build using IncrediBuild, just navigate to the ‘Extensions’ menu and choose one of the build options (Build Solution /Rebuild Solution/ Clean Solution). If you already initiated a build via IncrediBuild, and want to view the current build on the Build Monitor, simply navigate to the ‘View’ menu and choose ‘IncrediBuild Monitor’.
Talk To Us
"Да сколько ты ещё будешь собирать?" - фраза, которую каждый разработчик произносил хотя бы раз посреди ночи. Да, сборка бывает долгой и от этого никуда не деться. Нельзя же просто так взять и распараллелить всё это дело не на каких-то жалких 8 – 12 ядер, а так, чтобы на 100+. Или всё-таки можно?
Мне нужно больше ядер!
Как вы могли заметить, речь сегодня пойдёт как раз о том, как можно ускорить компиляцию. И нет, в этот раз будут рассмотрены не какие-то специфичные механизмы, а самое обычное распараллеливание. Ну, тут всё, казалось бы, просто – выставляем доступное физически количество ядер, нажимаем на build и идём пить условный чай.
Но с ростом кодовой базы время компиляции постепенно растёт и однажды оно станет настолько большим, что полностью проект будет собираться разве что ночью. Поэтому нужно подумать о том, как бы всё это ускорить. Вокруг же сидят довольные коллеги, которые занимаются своими программистскими делами, а их машины тихо и не напрягаясь выводят немного текста на экраны.
"Взять бы у этих бездельников ядра" - могли вы подумать. И правильно бы сделали, ведь это вполне себе можно реализовать. Но не нужно, конечно, принимать мои слова близко к сердцу и вооружаться паяльником. Впрочем, это уже на ваше усмотрение :)
Отдай!
Так как реквизировать машины коллег нам вряд ли кто-либо даст, будем пользоваться обходными путями. Даже если у вас и получилось убедить своих коллег поделиться железом, всё равно пользы от лишних процессоров у вас не будет, разве что можете выбрать себе тот, который пошустрее. А нам нужно то решение, которое каким-то образом позволит запускать дополнительные потоки сборки на удалённых машинах.
Благо среди тысяч категорий всякого полезного ПО, затесалась и нужная нам - система распределённой сборки. Программы этой категории делают именно то, что нам было и нужно: выдают на время простаивающие ядра коллег и при этом делают это
без их ведомав автоматическом режиме. Разве что сперва нужно будет поставить всё это на их машины, но об этом немного позже.На ком будем проверять?
Для того, чтобы убедиться, что всё функционирует действительно хорошо, нужно было найти качественного подопытного. Так как у нас уже не раз были в статьях и Chromium и Linux, а выделиться как-то хотелось, нужно было найти что-нибудь новое. Поэтому я пошёл в сторону открытых игр (а где же ещё искать большие проекты?). И как вы увидите ниже, очень пожалел об этом решении.
Впрочем, поиск чего-то объёмного труда не составил, да и мне "повезло" повстречать открытый проект на Unreal Engine. Вдуматься только! Я действительно до момента написания этой статьи и подумать не мог, что на UE бывает Open Source.
Итак, герой этой статьи: Unreal Tournament. Только вы не спешите сразу переходить по ссылке, так как вам может понадобиться пара дополнительных кликов - подробности *тут*.
Да будет сборка на 100+ ядер!
В качестве примера системы распределённой сборки я, пожалуй, остановлюсь на IncrediBuild. Не то, чтобы у меня был большой выбор - у нас была уже лицензия IncrediBuild на 20 машин. Нет, есть, конечно, открытый distcc, но он не так прост в настройке, да и к тому же практически все машины у нас под Windows.
Итак, первым делом нужно поставить агентов на машины других разработчиков. Есть два способа:
попросить коллег в местном Slack;
воззвать к силам сисадмина.
Разумеется, как и любой другой наивный человек, я написал сперва в Slack. Спустя пару дней еле-еле дошло до 12 машин из 20. После этого я воззвал к силам сисадмина и, о чудо, заветная двадцатка была у меня в руке. Так что теперь у меня было около 145 ядер (+/- 10) :)
За исключением необходимости поставить агентов (делается это парой кликов в установщике), нужно было поставить себе координатора. Это делается немного сложнее, поэтому оставлю ссылку на доки.
Итак, у нас теперь есть сетка на стероидах, поэтому пришло время добраться до Visual Studio. Выбираем в плагине сборку. А вот и нет :)
Если вдруг вы и сами захотите попробовать, то учтите, что сперва нужно собрать проекты ShaderCompileWorker и UnrealLightmass. Так как они не большие, я собрал их локально. Вот теперь уже можно нажать на заветную кнопку:
Итак, какая же получилась разница?
Как видите, нам удалось ускорить сборку с 30 минут до почти 6! Очень даже нехило. Кстати, запуск проводился посреди рабочего дня, так что примерно таких цифр можно ожидать и не на синтетическом тесте. Впрочем, от проекта к проекту разница может быть разной.
Что ещё можно ускорить?
Помимо сборки можно натравить IncrediBuild на любую тулзу, которая плодит много подпроцессов. Как вы, может, обратили внимание, я работаю в PVS-Studio. Поэтому конечно же я не могу обойти стороной возможность скормить ему и наш анализатор.
Профит в быстром анализе примерно такой же, как и в быстрой сборке: возможность локальных прогонов перед коммитом. Конечно, всегда есть желание залить всё сразу в мастер; но обычно тимлид бывает не в восторге от подобных действий, особенно когда валятся ночные прогоны на сервере. Поверьте мне – я валил :(
Настраивать особенно анализатор не нужно, разве что нам не повредит указать старые-добрые 145 потоков в настройках:
Ну и стоит указать местной сборочной системе кто тут анализатор:
Итак, пришло время нажать на сборку ещё раз и насладиться ускорением:
Вышло около семи минут, что подозрительно похоже на время сборки. Тут я и подумал, что видимо забыл добавить флаг. Зашёл в настройки и увидел, что всё на месте. Такого я не ожидал, поэтому отправился курить мануалы.
Спустя какое-то время я вспомнил про версию Unreal Engine, которая используется в этом проекте:
Не то, чтобы это плохо само по себе, но флаг -StaticAnalyzer появился много позже. Поэтому интегрироваться напрямую не то, чтобы было возможно. Примерно на этом моменте я уже начал задумываться о том, чтобы забить на всё это дело и уйти пить кофе.
После пары кружек бодрящего напитка у меня возникла мысль всё-таки дочитать туториал по интеграции до конца. Помимо указанного выше способа есть ещё и мониторинг компиляции. Это как раз тот вариант, когда ничего уже не помогает.
Первым делом включим сервер мониторинга:
Эта штука будет крутиться на фоне и следить за
тобойвызовами компилятора. Но она не может отслеживать происходящее в IncrediBuild, поэтому придётся один раз собрать без него.На фоне предыдущего запуска локальная пересборка выглядит очень бедно:
Теперь сохраним то, что насобирали в отдельный файл:
Дальше можно будет пользоваться этим дампом, пока вы не добавите новый файл в проект. Да, это не так удобно, как с флагом, но ничего не поделаешь – версия движка слишком старая.
Сам же анализ запускается вот этой командой:
Только не стоит его так запускать, ведь мы же хотим его запустить под IncrediBuild. Так что закинем эту команду в analyze.bat. И создадим рядом файл profile.xml:
И теперь мы можем запустить всё с нашими 145-ю ядрами:
И как это выглядит в Build Monitor:
Что-то много ошибок на этом графике, не так ли?
К нам закралась ещё одна проблема. И в этот раз дело не в то, что кто-то что-то не поддерживает. Сборка Unreal Tournament оказалась несколько специфичной.
Если посмотреть внимательно, то это не ошибки анализа, а неудачи при препроцессировании исходников. Причём, причина данного фейла была одна и та же:
Так в чём проблема? Всё довольно просто – препроцессор требует, чтобы только один из следующих макросов имел значение 1:
Да, вроде как всё собиралось раньше, а теперь что-то страшное вылетело. Пришлось закопаться в логи, а точнее в дамп компиляции. Там-то проблема и нашлась. Дело было в том, что эти макросы объявляются в местном precompile header, а мы хотим только препроцессировать. Так что пришлось добавить все эти макросы вручную:
Самое начало файла build.h
И уже с этим небольшим
костылёмэлегантным решением можно запустить анализ. Причём сборка не сломается, так как мы воспользовались макросом PVS_STUDIO.Итак, долгожданные результаты анализа:
Согласитесь, почти 15 минут вместо двух с половиной часов – это очень хорошее ускорение. Сложно представить, чтобы вы могли пить кофе 2 часа к ряду и ни у кого не возникло бы сомнений на ваш счёт. А вот 15 минутный перекур вопросов не вызывает. Наверно.
И что у нас в итоге?
Разумеется, что в идеальном мире увеличение количества потоков в N раз увеличило бы скорость сборки в N раз. Но живём мы в совершенно ином мире, поэтому стоит учитывать локальную нагрузку на агентов (удалённые машины), нагрузку на сеть, время на организацию всего этого дела и ещё много деталей, которые скрыты под капотом.
Впрочем, ускорение действительно есть и местами оно позволяет не просто запускать полную сборку или же анализ раз в день, а делать это куда чаще. Например, после каждого фикса или же перед коммитами. А теперь предлагаю посмотреть на то, как это всё выглядит в одной таблице:
Я запустил по пять раз и посчитал среднее по запускам (эти цифры вы и видели в графиках) :)
Читайте также: