Диспетчер пакетов NuGet пытается добавить обновления .NET 5.0 в приложение .NET Core 3.1 №28098

Когда я захожу в Инструменты | Диспетчер пакетов NuGet | "

Когда я захожу в Инструменты | Диспетчер пакетов NuGet | "Управление пакетом NuGet для решения" показывает, что доступно 12 обновлений.

Но когда я пытаюсь обновить их все, я получаю ошибки.

Я вижу проблемы несовместимости между .NET Core 3.1 и .NET 5.0, но не знаю почему.

Почему диспетчер пакетов NuGet пытается добавить обновления .NET 5.0 в приложение .NET Core 3.1?

ОБНОВИТЬ

Я предпочел остаться с .NET Core 3.1, но решил попробовать обновить проект до .NET 5.0 и посмотреть, что получится.

После обновления проекта я снова попытался обновить пакеты. На этот раз у меня другая ошибка.

Я действительно не понимаю, почему я получаю какие-либо из этих ошибок. Есть ли известные проблемы? Может ли кто-нибудь помочь мне понять, почему что-то не работает?

Примечание. Перед обновлением моего приложения до .NET Core я также обновил Visual Studio до версии 16.8.2.

Дополнительные технические детали

  • ASP.NET Core версии 3.1
  • Visual Studio версии 16.8.0 (Windows 10)

.NET SDK (отражающий любой global.json):

Версия: 5.0.100 Фиксация

: 5044b93829

Среда выполнения:

Имя ОС:

Версия ОС Windows : 10.0.19041

Платформа ОС:

RID Windows : win10-x64

Базовый путь: C: \ Program Files \ dotnet \ sdk \ 5.0.100 \

Хост (полезно для поддержки):

Версия: 5.0.0

Фиксация: cf258a14b7

Установленные

пакеты SDK .NET: 3.1.401 [C: \ Program Files \ dotnet \ sdk]

5.0.100 [C: \ Program Files \ dotnet \ sdk]

Установленные среды выполнения .NET:

Microsoft.AspNetCore.All 2.1.23 [C: \ Program Files \ dotnet \ shared \ Microsoft.AspNetCore.All]

Microsoft.AspNetCore.App 2.1.23 [C: \ Program Files \ dotnet \ shared \ Microsoft .AspNetCore.App]

Microsoft.AspNetCore.App 3.1.9 [C: \ Program Files \ dotnet \ shared \ Microsoft.AspNetCore.App]

Microsoft.AspNetCore.App 5.0.0 [C: \ Program Files \ dotnet \ shared \ Microsoft .AspNetCore.App]

Microsoft.NETCore.App 2.1.23 [C: \ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]

Microsoft.NETCore.App 3.1.9 [C: \ Program Files \ dotnet \ shared \ Microsoft .NETCore.App]

Microsoft.NETCore.App 5.0.0 [C: \ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]

Microsoft.WindowsDesktop.App 3.1.9 [C: \ Program Files \ dotnet \ shared \ Microsoft .WindowsDesktop.App]

Microsoft.WindowsDesktop.App 5.0.0 [C: \ Program Files \ dotnet \ shared \ Microsoft.WindowsDesktop.App]

Текст был успешно обновлен, но были обнаружены следующие ошибки:

В настоящее время мы не можем преобразовать задачу в проблему. Пожалуйста, попробуйте еще раз.

Проблема была успешно создана, но в настоящее время мы не можем обновить комментарий.

mkArtakMSFTпрокомментировал 24 ноября 2020 г.

Спасибо что связались с нами.

Это отличный отзыв, которым можно поделиться с командой NuGet.

@rrelyea, знаете ли вы, является ли https://github.com/nuget/home подходящим репо для передачи этого?

Pilchieпрокомментировал 24нояб.2020 г.

aortiz-msftпрокомментировал 24 ноября 2020 г.

Это похоже на обман NuGet / Home # 9882. Не могли бы вы увидеть там беседу, проголосовать за нее и добавить комментарии по мере необходимости? Там также обсуждается пара обходных путей.

Pilchieпрокомментировал 24нояб.2020 г.

Я не думаю, что это то же самое, что и эта. Дело в том, что есть пакеты, версия которых должна соответствовать TFM, который они используют как часть .NET Core / .NET 5 и ASP.NET Core, но пользовательский интерфейс диспетчера пакетов всегда предлагает людям обновить их.

AFAIK, у нас, как у авторов пакетов, нет возможности предотвратить это.

SoftCircuitsпрокомментировал 24 ноября 2020 г.

Это похоже на обман NuGet / Home # 9882. Не могли бы вы увидеть там беседу, проголосовать за нее и добавить комментарии по мере необходимости? Там также обсуждается пара обходных путей.

Похоже, это может быть то же самое, что и моя вторая проблема. Но исходный выпуск другой.

aortiz-msftпрокомментировал 24 ноября 2020 г.

@zkat - Не могли бы вы взглянуть на исходную проблему, о которой сообщалось?

zkatпрокомментировал 24 ноября, 2020

@SoftCircuits, первая проблема больше похожа на NuGet / Home # 10309 - в основном нет, мы просто не поддерживаем такого рода фильтрацию обновлений прямо сейчас. Мы просто ориентируемся на версии, а это значит, что вы можете столкнуться с подобной несовместимостью.

SoftCircuitsпрокомментировал 24 ноября 2020 г.

@SoftCircuits, первая проблема больше похожа на NuGet / Home # 10309 - в основном нет, мы просто не поддерживаем такого рода фильтрацию обновлений прямо сейчас. Мы просто ориентируемся на версии, а это значит, что вы можете столкнуться с подобной несовместимостью.

Ну, я не пытался фильтровать. Диспетчер пакетов показывал их как доступные обновления. Я действительно не думаю, что это должно в основном рекомендовать несовместимые обновления, которые могут вызвать ошибки. Я также не думаю, что мне нужно проходить каждый из них, чтобы попытаться выяснить, какие из них будут совместимы, а какие нет. Кажется, что это как раз то, для чего нужен менеджер пакетов.

Получение всех этих ошибок, в основном следуя подсказкам или предупреждениям, кажется проблемой с того места, где я стою.

zkatпрокомментировал 24 ноября, 2020

Я согласен, что это проблема! Это то, что мы намерены исправить, это то, как это работает прямо сейчас. Это определенно затрудняет правильные обновления и даже обычные старые установки, особенно когда мы находимся на границах фреймворка, таких как 3.1 ->5.0.

hiezustпрокомментировал 21 января 2021 г. •

Знаете ли вы о каких-либо проблемах при использовании пакетов Nuget 5.0 в .NET Core 3.1 WebAPI?

Кажется, что несколько пакетов nuget можно обновить до версии 5. Например:

Pilchieпрокомментировал 21 января 2021 г.

NuGet не блокирует его, и вполне вероятно, что он будет работать, но это не то, что мы обычно тестируем. Лучше всего использовать последние пакеты NuGet с исправлениями, которые соответствуют major.minor вашей цели.

nicoleta-scrimintпрокомментировал 22 января 2021 г.

Возможно ли, что NuGet заблокирует обновление пакетов .Net Core 3.1 до версий 5.XX? Основываясь на вашем ответе, мы знаем, что пакеты NuGet .Net Core 5.XX не гарантируют работу с .Net Core 3.1.

Было бы хорошо, если бы NuGet не позволял обновлять пакеты NuGet до версий между крупными версиями, такими как .Net Core 3.1 или .Net 5, 6, потому что для перехода на другую версию выпуска .Net Core требуется больше работы, чем простое обновление пакета NuGet. на основе руководства Microsoft по обновлению с https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-5.0&tabs=visual-studio.

Pilchieпрокомментировал 22 января 2021 г.

Это запрос NuGet. К сожалению, сейчас нет хорошего способа выразить это.

rrelyeaпрокомментировал 22янв.2021 г.

У NuGet есть две связанные вещи в нашем бэклоге. это сложные функции для реализации, но мы стремимся добавить поддержку.

мы не думаем, что авторам пакетов нужен новый способ выражения. Клиент nuget (и, возможно, сервер) должен стать умнее.

  1. поиск по tfm - поиск должен отображать только пакеты, совместимые с вашим проектом - NuGet / Home # 4071
  2. обновление по tfm - поисковая система не рекомендует обновлять пакеты, несовместимые из-за совместимости с TargetFramework - NuGet / Домашняя страница # 2084

Pilchieпрокомментировал 22 января 2021 г.

На самом деле, я не думаю, что эти функции обязательно помогут в этой ситуации. В данном случае мы говорим о пакете, в котором версии 3.1 и 5.0 нацелены на .NET Standard 2.0, но если вы работаете на .NET Core 3.1, вам следует использовать версию пакета 3.1, и если вы работает на .NET 5, вам следует использовать версию 5.0.

SoftCircuitsпрокомментировал 22 января 2021 г.

На самом деле, я не думаю, что эти функции обязательно помогут в этой ситуации. В данном случае мы говорим о пакете, в котором версии 3.1 и 5.0 нацелены на .NET Standard 2.0, но если вы работаете на .NET Core 3.1, вам следует использовать версию пакета 3.1, и если вы работает на .NET 5, вам следует использовать версию 5.0.

Да, у меня есть несколько опубликованных мной пакетов NuGet, в которых используется .NET Standard. Мне нужно выяснить, как добавлять версии .NET 5.0 без потери старых (для людей, которые еще не перешли на .NET 5.0). Похоже, для этого нужен какой-то менеджер, как для создания, так и для использования пакетов.

Pilchieпрокомментировал 22 января 2021 г.

@SoftCircuits - у вас должна быть возможность сделать это, если в вашем пакете есть ресурсы, специфичные для TFM.

SoftCircuitsпрокомментировал 22 января 2021 г.

@Pilchie Не уверен, что относится к TFM, но я знаю, что есть способ поместить разные версии в один и тот же пакет. Но Visual Studio не сделает этого за вас. Вам нужно вручную отредактировать файл пакета.

AraHaanпрокомментировал 7 марта 2021 г. •

@SoftCircuits Я бы порекомендовал отказаться от .NET Standard и вместо этого поставлять только .NET Core версии 3.1 и 5.0, а в csproj вы можете сделать следующее:

для каждого пакета, который вам нужно использовать из каналов времени выполнения.

* представляют собой номера версий с подстановочными знаками для любой сборки исправлений, которая будет выпущена позже.

Однако что, если я хочу использовать что-то вроде System.Runtime v5.0.0 внутри .NET Framework 4.7.2 из-за таких вещей, как System.OperatingSystem.IsWindowsVersionAtLeast () или даже System.OperatingSystem.IsWindows (), которые выглядят чище, чем System.Environment. OSVersion.Version в зависимости от проекта?

SoftCircuitsпрокомментировал 7 марта 2021 г.

@AraHaan Где я использую .NET Standard?

AraHaanпрокомментировал 7 марта 2021 г. •

Да, у меня есть несколько опубликованных мной пакетов NuGet, в которых используется .NET Standard. Мне нужно выяснить, как добавлять версии .NET 5.0 без потери старых (для людей, которые еще не перешли на .NET 5.0). Похоже, для этого нужен какой-то менеджер, как для создания, так и для использования пакетов.

Вы сказали, что у вас есть масса пакетов, использующих .NET Standard. Если вы ориентируетесь только на людей, которые используют .NET Core 3.1 и .NET 5, вам может сойти с рук таргетинг только на эти TFM.

Однако, поскольку .NET Standard зависит от версии .NET Standard (если 2.1+ вам не нужно включать .NET Framework, если 2.0+, вам нужно включить .NET Framework 4.6.1 (вы можете уйти, предоставив только папку net461 для .NET Framework и любой, кто использует более новые версии .NET Framework, будет использовать сборку net461)).

Теперь, когда я думаю о своем, я думаю, что мои проекты тоже могут отказаться от .NET Standard.

jefflillпрокомментировал 30 марта 2021 г.

Если я слежу за всем этим, похоже, что некоторые или всефайлы Microsoft.Extensions.* Пакеты v5.0.0 несовместимы (или протестированы) с приложениями .NET Core 3.1. В нашем случае у нас есть библиотека NET Standard 2.0, включающая эти пакеты v5.0.0, а затем мы использовали эту библиотеку в приложении .NET Core 3.1 (а также в тестах xUnit на основе .NET Framework).

Это означает, что я смог включить эти .NET Standard 2.0Microsoft.Extensions.* пакеты в мою библиотеку .NET Standard 2.0, что делает мою библиотеку несовместимой с приложениями .NET Core 3.1.

Вопрос:

Какие пакеты Microsoft следует избегать библиотекам NET Standard 2.0 для обеспечения совместимости с .NET Core 3.1?

Можно ли считать, что любойMicrosoft.* илиSystem.с версией выше v5.0.0 как несовместимой с .NET Core 3.1?

АраХаанпрокомментировал 30 марта 2021 г. •

System.Text.Json работает, несмотря на то, что он используется для .NET 5 или Core 3.1, даже если это предварительная версия 6.0.0. Но это редкость, и ориентация на фреймворк, поставляемый с System.Text.Json (например, .NET 5), может выдавать предупреждения при сборке, однако во время выполнения он все равно работает 😄.

nicoleta-scrimintпрокомментировал 20 мая 2021 г. •

NuGet не блокирует его, и вполне вероятно, что он будет работать, но это не то, что мы обычно тестируем. Лучше всего использовать последние пакеты NuGet с исправлениями, которые соответствуют major.minor вашей цели.

Какую версию мы должны использовать для таких пакетов, как System.Security.Permissions и System.ComponentModel.Annotations, у которых нет версии для 3.1.X, в приложениях .Net Core 3.1? Последняя версия под 5.XX - 4.7.0. Следует ли интерпретировать, что последняя версия 5.XX предназначена для .Net Core 3.1?

Я также заметил, что пакет Microsoft.AspNetCore.Mvc.Versioning версии 5.0.0 также нацелен на .Net Core 3.1. Означает ли это, что его можно использовать в приложении .Net Core 3.1?

Pilchieпрокомментировал 20 мая 2021 г.

Какую версию следует использовать для таких пакетов, как System.Security.Permissions и System.ComponentModel.Annotations?

Пакеты, созданные из corefx / runtime, делают разные (возможно, лучше 😉) вещи. @ericstj или @ViktorHofer могли бы это описать.

Microsoft.AspNetCore.Mvc.Versioning версии 5.0.0

Этот пакет не принадлежит команде - это пакет, созданный человеком, не связанным с командой, и я не могу сказать, как он выглядит. К сожалению, пакет был создан до того, как NuGet разрешил резервировать префиксы пакетов. Предлагаю спросить на этой странице.

ericstjпрокомментировал 20 мая 2021 г.

Какую версию следует использовать для таких пакетов, как System.Security.Permissions и System.ComponentModel.Annotations?

Эти пакеты созданы для работы на любых поддерживаемых ими фреймворках, поэтому пакеты эпохи 5.x работают с netcoreapp3.1 (точно так же, как они работают с .NETFramework и даже более ранними версиями .NETCore), однако мы тестируем и обслуживаем их в выпуске. группы. Таким образом, все пакеты 4.7.x тестируются вместе и поддерживаются в течение того же периода времени, что и выпуск, из которого они пришли. Выполняя обновление только в рамках диапазона выпуска, вы получаете минимальный отток и согласованные сроки обслуживания. Это то, что мы рекомендуем, если вы пытаетесь минимизировать изменения, оставаясь при этом в поддержке.

Пакеты 5.0.0 будут работать при использовании в 3.1, но мы не тестируем их там, поэтому вы можете столкнуться с проблемами. Мы хотели бы услышать об этих проблемах, поскольку они могут представлять проблемы совместимости в этом или будущем выпуске. Возьмем, к примеру, System.Text.Json и другие System.Diagnostics.DiagnosticSource: эти пакеты находятся в стадии активной разработки и работы над функциями в версиях 5.0 и 6.0. Эти пакеты используются другими библиотеками в экосистеме, предназначенными для netstandard. Мы ожидаем, что эти пакеты будут использоваться во всех поддерживаемых средах (версии .NETFramework, .NETCore 2.1, 3.1 и 5.0).

Кроме того, чтобы прокомментировать эти пакеты

Этот пакет представляет собой полностью устаревший код с пустыми типами реализации. Он предоставляется исключительно как бесполезная реализация CAS. По возможности избегайте его использования полностью.

Этот пакет обеспечивает мост между поверхностью API в .NETFramework и .NETCore. Он является частью обеих платформ и не требует пакета. Кроме того, он является частью .NETStandard 2.1. Вам нужно ссылаться на этот пакет только в том случае, если вы создаете библиотеку netstandard2.0 или ниже. Если вы ориентируетесь на любую другую структуру, вам не понадобится этот пакет, поскольку вы можете полагаться на типы, предоставляемые платформой.