Dotnet Core — как пакеты (dll) связаны в моем скомпилированном приложении

Я создаю новый веб-API ASP ядра dotnet (dotnet core 2.2) и заметил одну вещь: в нем есть ссылка на пакет с именем Microsoft.AspNetCore.App.

Если я загляну внутрь этого пакета, то на самом деле это отсылка к множеству других пакетов, которые Microsoft использует по умолчанию, чтобы вы могли создавать все поющие и все танцующие веб-приложения.

Одна вещь, которую я заметил внутри, это ссылки на пакеты (например), такие как аутентификация или структура сущностей. Ничего из того, что мне нужно (у меня очень простой API).

Мой вопрос

Влияют ли ссылки на неиспользуемые пакеты на общий вывод приложения? Экономит ли это потребление памяти (объекты не будут создаваться, если dll больше не связана).

Я предполагаю, что ссылки на пакеты, которые не используются, по-прежнему имеют «отпечаток» (общий вывод скомпилированного размера) в вашем приложении со ссылками на настраиваемые пакеты и объекты в создаваемых пакетах (я могу быть совершенно неправ насчет этого - так что любое разъяснение было бы здорово!).

Я использовал концепцию встряхивания дерева в мире пользовательского интерфейса, например, в WebPack. Я видел этот пост, который выглядит так, как будто dotnet имеет что-то подобное:

https://ianqvist.blogspot.com/2018/01/reduction-size-of-self-contained-net.html

Заранее благодарю за любой совет!


person Rob McCabe    schedule 16.04.2019    source источник


Ответы (1)


Я предполагаю, что вы ищете функцию обрезки дерева, которая недавно стала частью .Net Core 3.0. Его можно включить с помощью параметра PublishTrimmed в файле *.csproj.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PublishTrimmed>true</PublishTrimmed>
  </PropertyGroup>
</Project>

Вот сообщение в блоге от Скотта Хансельмана о минимизации скомпилированных артефактов.

person Sergey Koval    schedule 17.10.2019