Новые возможности в MSBuild 17.0

В этой статье описаны существенные обновления в MSBuild 17.0. Подробные заметки о выпуске см. в статье MSBuild 17.0.0.

MSBuild 17.0 поставляется с Visual Studio 2022 и .NET 6.0.

Измененный путь

MSBuild устанавливается в папку \Current каждой версии Visual Studio, а исполняемые файлы находятся в подпапке \Bin. Например, путь к MSBuild.exe установленному с помощью сообщества Visual Studio 2022 — C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe. Для поиска MSBuild можно также использовать модуль PowerShell: vssetup.powershell.

Измененные свойства

В связи с выходом нового номера версии изменены следующие свойства MSBuild.

  • MSBuildToolsVersion для этой версии средств остается текущей. Версия сборки имеет такой же номер, как и в Visual Studio 2017 и Visual Studio 2019, т. е. 15.1.0.0.

  • VisualStudioVersion для этой версии средств имеет значение 17.0.

64-разрядное

В MSBuild.exe ранее поддерживались 32-разрядная и 64-разрядная версии, но теперь по умолчанию используется 64-разрядная. Visual Studio 2022 использует 64-разрядную версию MSBuild для всех сборок. 32-разрядная версия по-прежнему доступна, но мы рекомендуем переключать все сборки на 64-разрядную.

Для владельцев задач это означает, что когда MSBuild загружает задачу, он попытается загрузить ее в 64-разрядном процессе. Рекомендуется обновить задачи, чтобы они выполнялись в 64-разрядном процессе, но для совместимости можно указать, что задача выполняется только как 32-разрядная, в UsingTask.

Улучшения производительности

MSBuild работает быстрее. Основное внимание в этом выпуске направлено на повышение производительности во многих распространенных сценариях. MSBuild 17.0 может создавать более крупные проекты быстрее.

Версии .NET

MSBuild и Visual Studio теперь по умолчанию создают код для .NET Framework 4.7.2 и .NET 6.0. Если вы хотите использовать новые функции API MSBuild, необходимо также обновить сборку, но существующий код будет продолжать работать.

Журналы

Двоичные журналы меньше и содержат больше информации.

Критические изменения

  • Метод GetType() больше не может вызываться в функциях свойств.
  • MSBuild для .NET предназначен для .NET 6.

Другие изменения в поведении

  • MSBuildCopyContentTransitively теперь по умолчанию включен, обеспечивая согласованность в выходных папках в добавочных сборках.

Дополнительные изменения в этой версии см. в подробных заметках о выпуске и изменениях в версиях MSBuild, которые можно отказаться от изменений, см. в разделе "Волны изменений".