Волны перемен
волна изменений — это набор изменений в поведении MSBuild, от которых можно отказаться, указав определённый флаг в качестве переменной среды. Цель этого заключается в том, чтобы предупредить вас о потенциально разрушительных изменениях, чтобы вы имели гибкость в адаптации к этим изменениям, прежде чем они становятся стандартными функциями. Все функции в определенной волне изменений могут быть включены или отключены только отдельно.
При обновлении до новой версии MSBuild изменения, которые потенциально нарушаются, включены по умолчанию, но если функция негативно влияет на сборку, вы можете легко отключить эту волну изменений. Каждая волна изменений определяется номером версии MSBuild (например, 16.8), но настройка волны изменений определяет только определенные функции, которые могут повлиять на процесс сборки, а не все изменения в этой версии MSBuild. Список функций каждой волны изменений отображается далее в этой статье. Отключение волны изменений также отключает волны изменений более высоких версий.
Отказ от функций волны изменений
Чтобы отключить функции в волне изменений, задайте переменную среды MSBuildDisableFeaturesFromVersion
на волну изменений (или версию MSBuild), которая содержит функцию, которую требуется отключены. Это версия MSBuild, для которую были разработаны функции. См. сопоставление волн изменений с функциями ниже.
Значения MSBuildDisableFeaturesFromVersion
Вы получите предупреждение и/или по умолчанию будете перенаправлены на определенную волну, если не зададите MSBuildDisableFeaturesFromVersion
как допустимую волну изменений. В следующей таблице показаны возможные параметры:
значение MSBuildDisableFeaturesFromVersion |
Результат | Получение предупреждения? |
---|---|---|
Сбросить | Включите все волны изменений, что означает, что все функции, стоящие за каждой волной изменений, включены. | Нет |
Любая допустимая и текущая волна изменений (например, 16.8 ) |
Отключите все функции, стоящие за волной изменений, 16.8 и более поздних. |
Нет |
Недопустимое значение (например, 16.9 , если допустимые волны 16.8 и 16.10 ) |
По умолчанию выбирается ближайшее допустимое значение по возрастанию. Например, установка 16.9 по умолчанию приведет к значению 16.10 . |
Нет |
Вне ротации (например, 17.1 , когда самая высокая волна 17.0 ) |
Устанавливает ближайшее допустимое значение. Например, 17.1 зажимается к 17.0 , а 16.5 зажимается к 16.8 |
Да |
Недопустимый формат (например, 16x8 , 17_0 , garbage ) |
Включите все волны изменений, что означает, что все функции, стоящие за каждой волной изменений, включены. | Да |
Изменение волн и связанных особенностей
17.10
-
конфигурация AppDomain сериализуется без использования BinFmt — от функции можно отказаться только в том случае, если BinaryFormatter разрешен во время выполнения путем редактирования
MSBuild.runtimeconfig.json
. - Данные разрешателя Cache SDK на уровне всего процесса
17.8
- [RAR] Не выполняйте операции ввода-вывода на ссылках, предоставленных SDK
- Удалить целевой файл перед копированием
- переход с SHA1 на SHA256 для задачи Hash
-
Не рекомендуется использовать пользовательские производные BuildEventArgs — от функции можно отказаться только в том случае, если BinaryFormatter разрешён во время выполнения через редактирование
MSBuild.runtimeconfig.json
17.6
- Разбор некорректного свойства в целевом объекте
- Устранение кэша строк проекта
- Регистрируйте ошибку, если не указан путь поиска для импорта
- сборка журнала загружает
- AnyHaveMetadataValue возвращает значение false при передаче пустого списка
- Автономное расширение лог-элемента
17.4
- соблюдение deps.json при загрузке сборок
- Рассмотрим
Platform
по умолчанию во время согласования платформ - Добавление утвержденного шаблона сопоставления имен SDK в манифесты SDK
- Выдать предупреждение о недопустимых типах проектов
- сервер MSBuild
- вызов нового API CultureInfo при проверке культур (только для .NET Core)
17.0
- Планировщик должен учитывать BuildParameters.DisableInprocNode
- Не компилируйте глоббинг регулярных выражений в .NET Framework
- По умолчанию для транзитивного копирования элементов содержимого
-
ссылочные сборки теперь больше не помещаются в каталог
bin
по умолчанию (возвращены здесь и возвращены здесь) - Улучшить возможности отладки: добавьте глобальный переключатель MSBuildDebugEngine; внедрите двоичный логгер из BuildManager; распечатайте статический граф в виде .dot файла
- Исправление взаимоблокировки в BuildManager и LoggingService
- Оптимизация уровня диагностики для логгера файлов и логгера консоли
- Оптимизированные проверки на актуальность неизменяемых файлов
- Добавить Microsoft.IO.Redist для перечисления каталогов
- кэширование по всему процессу в ToolsetConfigurationSection
- Нормализация путей вывода RAR
Изменение волн больше не вращалось
16.8
- Включить NoWarn
- Усечение пропущенных сообщений журнала о задаче/цели до 1024 символов
- Не развертывайте полные глобы диска с ложным условием
16.10
- Ошибка, когда в условии расширения свойства есть пробелы
- Возможность указания пользовательского расположения для CopyToOutputDirectory с помощью TargetPath
- Разрешить пользователям, имеющим определенные специальные символы в имени пользователя, успешно создавать при использовании exec
- Операции восстановления терпят неудачу, если проблема с SDK неразрешима
- Оптимизация оценки глобов
Вопросы и ответы
Почему каждый другой выпуск предназначен для поворота волн изменения?
Мы считаем, что это достаточно времени, чтобы обсудить с пострадавшими и помочь адаптироваться к изменениям.
Почему переменная среды, а не свойство проекта?
Существуют сценарии, в которых мы хотим разместить функцию под волной изменений, прежде чем MSBuild загрузила проект. По этой причине смена волн требует использования переменных среды.
Почему выбрать отказ от участия, а не согласие?
Отказ от участия является более подходящим для нас подходом, иначе мы, вероятно, получим ограниченные отзывы, когда функция влияет на конфигурации клиентов.