System.Text.Конфликт версий Json

#c# #.net

#c# #.net

Вопрос:

У меня есть решение с 2 проектами:

  • Функция netcoreapp3.1 Azure
  • библиотека netstandard2.1

Проект netcoreapp3.1 ссылается на проект библиотеки. Проект библиотеки использует System.Text.Json API. Когда я создаю решение, я получаю следующую ошибку:

Сборка ‘System.Text.Json’ с идентификатором ‘System.Text.Json, Version= 4.0.1.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51’ использует ‘System.Runtime, Version= 4.2.2.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a’, которая имеет более высокую версию, чем указанная сборка ‘System.Runtime’с идентификатором ‘System.Runtime, Version= 4.1.2.0, Culture=нейтральный, PublicKeyToken=b03f5f7f11d50a3a’

Я попытался явно установить System.Text.Json 4.7.2 в проект netstandard2.1. Теперь приложение компилируется и работает. Однако во время процесса сборки я получаю несколько предупреждений, подобных этому:

##[предупреждение]/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5): предупреждение MSB3243: невозможно разрешить конфликт между «System.Text.Json, Version = 4.0.1.2, Culture = neutral, PublicKeyToken= cc7b13ffcd2ddd51» и «System.Text.Json, Version = 4.0.1.0, Culture = neutral, PublicKeyToken= cc7b13ffcd2ddd51». Выбор «System.Text.Json, Version = 4.0.1.2, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51» произвольно.

Что я делаю не так?

Комментарии:

1. просто явно укажите версию пакета.

2. System.Text.Json изменилось в .net core 3.0, они внесли изменения в некоторые типы в System.Text.Json пространстве имен. Также они рекомендуют: > Удалить Newtonsoft. Зависимость Json от .Net Core . До . Net Core 3.x .Net Core зависел от Newtonsoft.Json. А также я вижу, что ваша функция использует .net core 5 sdk. Проверьте это .

3. Из того, что я обнаружил, что при использовании сборок .Net Core с. Библиотеки сетевых классов обычно не очень хорошо сочетаются, т. Е. При обновлениях вы будете продолжать появляться с подобными ошибками. Рассмотрите возможность использования вместо этого пакета .Net Core.

4. @DanielA. Белый Что вы имеете в виду под этим?

5. использовать <PackageReference Include="System.Text.Json" Version="..." />

Ответ №1:

Иногда visual Studio рекомендует пакеты NuGet для установленного вами SDK (например, .NET 5), даже если ваш проект нацелен на .NET 3.1, как в вашем случае.

Для решения используйте управление пакетами NuGet…

введите описание изображения здесь

В диспетчере вы можете обнаружить, что у вас есть пакеты, которые вы можете консолидировать (поэтому они будут использовать одну и ту же версию).

введите описание изображения здесь

Если нет, вам придется искать и проверять в менеджере. Ищите пакеты, которые имеют 5. * вместо 3.1. *. Также вы можете найти немного другие версии. постарайтесь сделать их согласованными в вашем решении.

Ответ №2:

Вот, пожалуй, лучший ответ.

Понизьте Microsoft.Extensions.Configuration.Json версию до 3.1.1, как на моем скриншоте.

Благодаря этому обходному пути проблемы github.

введите описание изображения здесь