День 2651. #ЧтоНовенького
VSTest удаляет зависимость от Newtonsoft. Json
Начиная с . NET 11 Preview 4 и Visual Studio 18.8, VSTest, платформа, на которой работают dotnet test и Test Explorer, больше не будет зависеть от Newtonsoft. Json. Теперь будет использоваться System. Text. Json в . NET и JSONite в . NET Framework. Большинству проектов никаких действий не требуется. Небольшое количество проектов может столкнуться с ошибкой сборки или тестирования и решить её добавлением одной строки PackageReference.
Зачем?
VSTest годами поставлялся с Newtonsoft. Json в составе . NET SDK и Visual Studio. Все версии Newtonsoft. Json ниже 13.0.0 теперь помечены как уязвимые на http://NuGet.org/, и наличие этой зависимости делает тестовую платформу уязвимой в компоненте, который ей больше не нужен. Удаление является частью более масштабной работы по удалению Newtonsoft. Json из . NET SDK.
Что не меняется?
- Формат передачи VSTest. Сообщения сериализуются одинаково независимо от того, используется ли Newtonsoft. Json, System. Text. Json или JSONite.
- Старые тестовые хосты остаются совместимыми с обновлённой платформой, и наоборот.
- Производительность сериализации остается прежней или улучшается.
Кого это НЕ затронет?
Большинство тестовых проектов:
- Проекты, которые не используют Newtonsoft. Json.
- Проекты, которые ссылаются на Newtonsoft. Json в виде обычной ссылки PackageReference.
- Проекты xUnit и NUnit, работающие на . NET или использующие AppDomains. Для них уже требовалась явная ссылка.
Кого это затронет и как это исправить
Каждая из перечисленных ниже ошибок не является скрытой, сообщается в ходе выполнения теста и передаётся в TRX и представления тестов Azure DevOps / GitHub.
1. Ошибка сборки: отсутствует ссылка на Newtonsoft. Json
Если тестовый проект использует типы Newtonsoft. Json (например, JObject, JsonConvert) без ссылки на этот пакет, ранее он компилировался только потому, что Newtonsoft. Json просачивался через VSTest. После обновления это будет не так.
Исправление: добавьте пакет.
2. Ошибка выполнения: FileNotFoundException для Newtonsoft. Json
Проекты, которые ссылаются на Newtonsoft. Json, но не содержат ресурс времени выполнения — например:
runtime
Предполагалось, что копия библиотеки из VSTest будет присутствовать во время тестирования. После этого обновления запуск теста завершится с ошибкой:
System. IO. FileNotFoundException: Could not load file or assembly 'Newtonsoft. Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.
Исправление: уберите
runtime, либо установите Newtonsoft. Json без исключения ресурсов времени выполнения.
3. Ошибка загрузки расширения в тестовом адаптере или сборщике данных
Адаптеры и сборщики данных, которые использовали Newtonsoft. Json, не указав его в качестве зависимости, завершатся с ошибкой во время загрузки с сообщением, подобным следующему:
Data collector 'SampleDataCollector' threw an exception during type loading, construction, or initialization: System. IO. FileNotFoundException: Could not load file or assembly 'Newtonsoft. Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.
В сообщении будет указано имя расширения, которое необходимо обновить, однако на данный момент о таких проблемах не сообщалось. Авторам расширений следует добавить Newtonsoft. Json в свой пакет (или отказаться от него); пользователи могут добавить Newtonsoft. Json в тестовый проект или отключить затронутое расширение до его обновления.
Изменение публичного API
VSTest предоставлял доступ к Newtonsoft. Json. Linq. JToken в одном месте своего API связи. Этот тип удаляется из публичного доступа. Он имел смысл только для кода, участвующего в протоколе VSTest, и вряд ли будет использоваться реальными пользователями, но авторам расширений следует об этом знать.
Источник: https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/