Есть способ уменьшить размер пакета, но я бы сказал, что это не хороший способ или способ, которым все должно быть сделано , но все же я думаю, что он может быть полезен в некоторых случаях.
Обратите внимание: этот подход требует, чтобы на целевых машинах были установлены все необходимые компоненты (включая .NET Core Runtime и т. Д.)
При создании приложения .NET Core существует дваМодели развертывания: автономные и зависящие от фреймворка.
В автономном режиме все необходимые двоичные файлы каркаса публикуются с двоичными файлами приложения, тогда как в зависимом от каркаса публикуются только двоичные файлы приложения.
По умолчанию, если в проекте указано время выполнения: <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
в .csproj
, тогда операция публикации является автономной, поэтому все ваши сервисы копируют все.
Для того, чтобы отключить этоВы можете просто добавить свойство SelfContained = false в каждый имеющийся у вас сервисный проект.
Вот пример нового сервиса .NET Core без сохранения состоянияпроект:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
<ServerGarbageCollection>True</ServerGarbageCollection>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
<TargetLatestRuntimePatch>False</TargetLatestRuntimePatch>
<SelfContained>false</SelfContained>
</PropertyGroup>
Я провел небольшой тест и создал новое приложение Service Fabric с пятью сервисами.Размер несжатого пакета в Debug составлял около 500 МБ.После того, как я изменил все проекты, размер пакета упал до ~ 30 МБ.
Развернутое приложение хорошо работало в локальном кластере, поэтому оно демонстрирует, что эта концепция является рабочим способом уменьшения размера пакета.
В конце я еще раз выделю предупреждение:
Обратите внимание: этот подход требует, чтобы на целевых машинах были установлены все необходимые компоненты (включая .NET Core Runtime и т. Д.)