Почему после ссылки на 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 для пакетов, чтобы увидеть, что входит в цепочку.
- Не бойтесь зайти в исходный код для одной из ваших зависимостей, чтобы увидеть, не привносит ли она что-то неожиданное, и, если вы видите это, спросите соответствующего владельца, намеренно ли это.