Изменение волн
Волна изменений — это набор изменений в поведении в MSBuild, от которых можно явно отказаться, указав определенный флаг в качестве переменной среды. Это необходимо для того, чтобы предупредить об изменениях, которые могут привести к нарушению работы. Это позволяет обеспечить гибкость при адаптации к этим изменениям, прежде чем они станут стандартными функциями. Все функции в конкретной волне изменений могут быть включены или отключены только вместе, а не по отдельности.
При обновлении до новой версии MSBuild изменения, которые могут привести к нарушению работы, по умолчанию включены. Однако если функция оказывает отрицательное влияние на сборку, можно легко отключить эту волну изменений. Каждая волна изменений идентифицируется номером версии MSBuild (например, 16.8), однако установка волны изменений влияет только на некоторые функции, которые могут повлиять на процесс сборки, а не на все изменения в этой версии MSBuild. Список функций в каждой волне изменений приведен далее в этой статье. При отключении волны изменений также отключаются волны изменений более поздних версий.
Явный отказ от функций волны изменений
Чтобы отключить функции в волне изменений, задайте для переменной среды MSBuildDisableFeaturesFromVersion
значение, соответствующее волне изменений (или версии MSBuild), содержащей функцию, которую необходимо отключить. Это версия MSBuild, для которой были разработаны функции. Сведения о соответствии волн изменений и функций приведены ниже.
Значения MSBuildDisableFeaturesFromVersion
Если в качестве значения переменной среды MSBuildDisableFeaturesFromVersion
не задана допустимая волна изменений, то будет выдано предупреждение и (или) будет использована конкретная волна изменений по умолчанию. Возможные значения приведены в следующей таблице:
MSBuildDisableFeaturesFromVersion Значение |
Результат | Выдается ли предупреждение |
---|---|---|
Не задано | Включаются все волны изменений, т. е. включаются все функции в каждой волне изменений. | No |
Любая допустимая и текущая волна изменений (например, 16.8 ) |
Отключаются все функции до волны изменений 16.8 и более поздних версий. |
No |
Недопустимое значение (например, 16.9 , если допустимыми являются волны изменений 16.8 и 16.10 ) |
По умолчанию используется ближайшее допустимое значение (по возрастанию). Например, при указании волны изменений 16.9 по умолчанию будет использоваться волна изменений 16.10 . |
No |
Неиспользуемая волна изменений (например, 17.1 , когда максимальная волна изменений — 17.0 ) |
Используется ближайшее допустимое значение. Например, если указано 17.1 , используется 17.0 , а при указании 16.5 используется 16.8 |
Да |
Недопустимый формат (например, 16x8 , 17_0 , garbage ) |
Включаются все волны изменений, т. е. включаются все функции в каждой волне изменений. | Да |
Волны изменений и связанные функции
17.10
- Конфигурация AppDomain сериализуется без использования BinFmt . Функцию можно отказаться только в том случае, если BinaryFormatter разрешено во время выполнения путем редактирования
MSBuild.runtimeconfig.json
- Решение пакета 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
- Включить параметр "Не выдавать предупреждения"
- Обрезать сообщения журнала, пропущенные целевым объектом или задачей, до 1024 символов
- Не разворачивать полные стандартные маски диска с ложным условием
16,10
- Ошибка, когда расширение свойства в условии содержит пробелы
- Разрешить пользовательское расположение CopyToOutputDirectory с помощью TargetPath
- Разрешить пользователям, имеющим определенные специальные символы в имени пользователя, успешно создавать при использовании exec
- Сбой операций восстановления при неразрешимом пакете SDK
- Оптимизация оценки глобов
Вопросы и ответы
Почему каждый второй выпуск помечается как включающий волны изменений?
Мы считаем, что это позволяет обеспечить достаточное время для того, чтобы обсудить изменения с затронутыми пользователями и помочь им адаптироваться к изменениям.
Почему используются переменные среды, а не свойства проекта?
Существуют сценарии, в которых необходимо поместить функцию в волну изменений перед загрузкой проекта в MSBuild. По этой причине для волн изменений необходимо использовать переменные среды.
Почему используется явный отказ, а не согласие?
Использование отказа является оптимальным для нас. В противном случае реакция, связанная с влиянием функции на сборки клиентов, скорее всего, была бы ограниченной.