Раскрывающиеся пакеты NuGet .NET Core в пользовательский кеш - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение .NET Core 2.2.0, которое ссылается на различные пакеты NuGet.

.NET Core опирается на пакеты стиля PackageReference, определенные в файлах проекта .csproj. Он не полагается на packages.config

Тем не менее я ожидал, что Restore NuGet Packages (или Build) развернет все ссылочные пакеты и их зависимые пакеты в папку проекта packages (уровень однорангового узла до * 1014). * или .sln файл).

Я ожидал этого, потому что, насколько я понимаю, .NET Core следует многим соглашениям менеджеров пакетов с открытым исходным кодом, таким как npm, которые работают по принципу самодостаточных доменов приложений.

Однако подавляющее большинство пакетов перетащено в эту папку:

C:\Users\username\.nuget\packages\

(пара пакетов помещена в папку проекта packages- и я не вижу, что эти пакеты отличаются.)

Очевидно, Visual Studio и / или NuGet предпочитает избегать дублирования усилий и централизованно кэшировать почти все пакеты.

Почему это ? И может ли он быть настроен по-другому?

1 Ответ

0 голосов
/ 05 октября 2019

Во-первых, описанное вами поведение «менеджера пакетов с открытым исходным кодом» на самом деле не является «менеджером пакетов с открытым исходным кодом». Это реализация некоторых менеджеров пакетов. Например, Java Maven (mvn) делает то же самое, что и .NET Core, и вы не можете утверждать, что maven является закрытым исходным кодом.

Во-вторых, некоторые менеджеры пакетов, такие как npm, копируют всезависимости в каталог пакета (например, node_modules), потому что они используют источники, а не двоичные файлы, и потому что они захватывают транзитивные источники и несколько зависимостей с одинаковыми именами, но разными версиями. NuGet этого не делает. Он использует только двоичные файлы и не поддерживает несколько версий. NuGet разрешает только одну версию для каждой зависимости в вашем проекте. Для получения дополнительной информации см. Этот пост stackoverflow . Точная версия, разрешенная и использованная, записывается в файл .deps.json в вашем каталоге компоновки.

В-третьих, автономные развертывания .NET Core - которые предназначены для выполнения / распространения без каких-либо дополнительных зависимостей -не используйте кеш пакета. Когда вы публикуете свое приложение (dotnet publish в командной строке), все зависимости копируются в каталог публикации. Версия заключается в том, что в файле deps.json, как я уже говорил выше.

Таким образом, основной кэш пакетов nuget, который используется в вашей системе совместно с другими проектами, представляет собой простой кэш двоичных файлов для .NET Core. ,Нет причины, по которой ваш проект должен быть уникальным для копирования в каталог вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...