Почему после ссылки на nuget размер упакованного инструмента значительно увеличился по сравнению с информацией о размере, предоставленной на nuget.org?

Почему такая огромная разница между тем, что я вижу в nuget.org при загрузке пакета и увеличении его размера после упаковки с данным nuget?

Например: В nuget.org я вижу, что размер загружаемого пакета Lamar составляет всего 140,56 КБ. Но размер моего пакета вырос с ~450 КБ до ~8 МБ после того, как я добавил Lamar в свой проект и упаковал его как глобальный инструмент dotnet. Затем я попытался добавить другой нюгет для IOC Autofac. В nuget.org размер загрузки составляет 272,5 КБ (больше). Но после ссылки на него и упаковки моего глобального инструмента я обнаружил, что теперь мой пакет намного меньше (всего 516 КБ против ~8 МБ). Зачем?

Есть ли лучший способ найти / предсказать, насколько большим станет ваш пакет nuget после обращения к некоторому новому nuget?

1 ответ

Решение

Невозможно предсказать, что будет отображаться в пакете, хотя вы должны учитывать, что в него входят не только зависимости, на которые вы ссылаетесь, но и любые зависимости, которые им нужны - транзитивные зависимости. Все, что не включено в пакет.NET Core App (подумайте "основные требования времени выполнения"), должно быть упаковано.

Вы можете посмотреть на странице NuGet для Lamar и увидеть потребности 2.0.4 LamarCompiler а также Microsoft.Extensions.DependencyInjection.Abstractions, Те, в свою очередь, нуждаются в других вещах.

Я бы порекомендовал захватить NuGet Package Explorer. Как только вы создадите свой пакет инструментов, вы можете открыть его в этом, чтобы просмотреть, что на самом деле там. (Технически, вы также можете просто переименовать его из.nupkg в.zip и открыть его, но проводник делает это хорошо.)

После добавления Ламара, я вижу...

  • Lamar.dll
  • LamarCompiler.dll
  • Microsoft.CodeAnalysis.CSharp.dll
  • Microsoft.CodeAnalysis.CSharp.Scripting.dll
  • Microsoft.CodeAnalysis.CSharp.Workspaces.dll
  • Microsoft.CodeAnalysis.dll
  • Microsoft.CodeAnalysis.Scripting.dll
  • Microsoft.CodeAnalysis.VisualBasic.dll
  • Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll
  • Microsoft.CodeAnalysis.Workspaces.dll
  • Microsoft.Extensions.DependencyInjection.Abstractions.dll
  • System.Composition.AttributedModel.dll
  • System.Composition.Hosting.dll
  • System.Composition.Runtime.dll
  • System.Composition.TypedParts.dll

Большая часть этого, похоже, связана с анализаторами Roslyn - с CodeAnalysis. Я вижу, что на это есть ссылка в исходном коде LamarCompiler, хотя обычно я вижу, что он установлен как PrivateAssets=all чтобы он не входил в проект и не включался таким образом. Обычно у вас нет анализаторов Roslyn в качестве проектных зависимостей, так как они создаются во время сборки. Тем не менее, я не знаю, намеренно ли это; это может быть что-то, о чем вы хотели бы спросить людей из Ламара. Это может быть просто небольшая оплошность, или может быть причина.

TLDR:

  • Вы не можете угадать по размеру, просто построить его и посмотреть.
  • Используйте NuGet Package Explorer, чтобы увидеть, что оказалось в пакете.
  • Используйте страницы NuGet для пакетов, чтобы увидеть, что входит в цепочку.
  • Не бойтесь зайти в исходный код для одной из ваших зависимостей, чтобы увидеть, не привносит ли она что-то неожиданное, и, если вы видите это, спросите соответствующего владельца, намеренно ли это.
Другие вопросы по тегам