nuget не разрешает зависимость, используя то, что указано в пакете nuget для Microsoft.Extensions.Logging

Задний план:

Я создал библиотеку классов для ядра .net (таргетинг на v2.2), а также у меня есть приложение ядра .net (таргетинг на v2.2).

Я пытаюсь экспортировать библиотеку как пакет nuget и установить ее в свое приложение. Вот зависимости для моей библиотеки

Зависимости MyLib

Я могу экспортировать его как пакет nuget, и сейчас я храню его в локальном репозитории nuget. Но когда я пытаюсь установить этот пакет библиотеки в свое приложение, он не устанавливается из-за конфликта версий пакета для Microsoft.Extensions.Logging. Вот вывод консоли диспетчера пакетов.

PackageManagerConsoleOutput

Проблема:

Я указал точную версию для Microsoft.Extensions.Logging, т.е. [2.2.0], поскольку мы можем подтвердить, что на снимке экрана, показывающем зависимость для моей библиотеки, тогда почему она разрешается до версии 3.0.0? Как я мог решить эту проблему?

Подробности об окружающей среде:

  • Используемый продукт NuGet (консоль диспетчера пакетов): версия хоста консоли диспетчера пакетов 5.3.1.6268
  • Версия VS (при необходимости): Microsoft Visual Studio Community 2019 Version 16.3.8
  • Версия ОС (например, win10 v1607 (14393.321)): Версия Windows 10 Enterprise: 1809

person HelioVaGator    schedule 20.11.2019    source источник
comment
Я создал пакет точно так же, как и вы, а затем установил его в исходное приложение net core 2.2 и не обнаружил, что все в порядке. Я предполагаю, что вы установили другие пакеты nuget, которые зависят от Microsoft.Extensions.Logging 3.0. Пожалуйста, проверь это. Кроме того, если возможно, поделитесь файлом nuspec (если вы используете), файлом csproj или другими пакетами nuget, если вы использовали.   -  person Pod Mo    schedule 21.11.2019
comment
Я думаю, вам нужно очистить кеш nuget перед установкой этого пакета, если вы ранее устанавливали этот пакет с другим содержимым! Потому что одна копия вашего пакета хранится в кеше nuget.   -  person LoLance    schedule 22.11.2019
comment
Привет, друг, есть ли обновления по этой проблеме? Проверьте, помогает ли мой ответ, см. что должно .... Просто напоминание :)   -  person LoLance    schedule 26.11.2019


Ответы (1)


Как я мог решить эту проблему?

Чтобы устранить странное поведение на вашей стороне, вы должны очистить кеш nuget перед установкой этого пакета в текущий проект.

(Чтобы убедиться, что кеш очищен, я предлагаю вам пойти %userprofile%\.nuget\packages и проверить, существует ли Com.lib папка в папке Packages)

Я указал точную версию для Microsoft.Extensions.Logging, то есть [2.2.0], поскольку мы можем подтвердить, что на снимке экрана, показывающем зависимость для моей библиотеки, тогда почему она разрешается до версии 3.0.0?

Я думаю, что тот (Com.Mylib), который вы хотите установить, не первый, который вы упаковываете. Я имею в виду, что вы можете собрать и упаковать несколько разных пакетов Com.Mylib с разным содержимым. И все их имена Com.lib.1.0.0.nupkg.

Nuget хранит весь кеш nuget в %userprofile%\.nuget\packages. Итак, если я однажды установлю один PackageA в любом проекте. Там хранится кеш PackageA. И если я открываю новый проект, пытаясь установить PackageA с той же версией (1.0.0), он фактически устанавливает проект из кеша. Итак, мы встретим это странное поведение:

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

Nuget может распознать, что пакет Com.lib зависит от других пакетов 2.2.0. Но когда он пытается установить этот пакет, он обнаруживает, что пакет существует в кеше. Затем он пытается установить тот, который находится в кеше, и я предполагаю, что содержимое того, что находится в кеше, отличается от вашего последнего, тогда возникает проблема.

Предложения:

1. При локальной разработке используйте ссылку на проект вместо пакетов Nuget.

2.Если вам нужно тестировать пакет nuget каждый раз после упаковки, убедитесь, что версия пакета увеличилась. (1.0.0 => 1.0.1 => 1.0.3 ... или beta-1.0.12, превью- ххх)

3. Если у вас есть особая причина использовать ту же версию 1.0.0, clean the cache, чтобы предыдущий кеш не повлиял на текущий проект.

Надеюсь, что все вышеперечисленное поможет :)

person LoLance    schedule 22.11.2019
comment
Большое спасибо @Lance Li-MSFT, удаление кеша nuget решило проблему. - person HelioVaGator; 27.11.2019