Как уменьшить размер приложения на C#, которое независимо от среды?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В этой статье поделюсь опытом, как уменьшить размер приложения, написанное на C# и независящее от сборки, в 2 – 4 раза.

Внимание: Сжатие содержимого программы доступно только для self-contained публикаций. А также все действия происходят в Visual Studio Preview 2019.

Если вы здесь за быстрым решение, то вот что вам нужно сделать

В .csproject добавьте следующие строки:

Опасный режим: удаляет неиспользуемые классы и методы. Имеет риск, что приложение перестанет работать корректно, поэтому требует тестирования всех функций приложения после публикации.

<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>Link</TrimMode>

Более безопасный режим: удаляет только неиспользуемые сборки.

<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>CopyUsed</TrimMode>

Затем нажмите ПКМ по проекту → Publish → Folder → Финиш → Show All Settings. Выставите следующие настройки:

  • Deployment Mode: Self-Contained

  • Target Runtime: win-x64 или свою версию. (Должна совпадать со строчкой RuntimeIdentifier)

Разверните File publish options и поставьте галочки под: Produce single file и Trim unused asseblies.

Нажмите кнопку Publish.


Всё то же самое, только командой

Опасный режим:

dotnet publish -c Release -r win10-x64 -p:PublishTrimmed=True -p:TrimMode=Link -p:PublishSingleFile=true --self-contained true

Более безопасный режим:

dotnet publish -c Release -r win10-x64 -p:PublishTrimmed=True -p:TrimMode=CopyUsed -p:PublishSingleFile=true --self-contained true

Более подробно о том, что происходит за настройками выше

Первые 3 настройки имею говорящее название и должны совпадать с теми, что вы используете при публикации через Visual Studio.

Команда PublishTrimmed активирует обрезку сборки.

Команда TrimMode выбирает способ обрезки сборки. Здесь и происходит вся магия по сокращению размера итогового файла.

Всего имеется 2 режима: CopyUsed (Assembly-level trimming) и Link (Member-Level Trimming).

Assembly-level trimming — Просто удаляет неиспользуемые сборки. То есть алгоритм просто проходится по всем файлам программы, составляет список сборок, а затем удаляет из итоговой сборки все файлы, которые не используется. Этот метод мне помог сократить размер программы с 300 МБ до 96 МБ. При ZIP архивации этот файл стал 30МБ.

Member-Level Trimming — Экспериментальный режим. Алгоритм анализирует ваш код и удаляет все ненужные классы, методы и т.д. Из-за того, что алгоритм влезает в код, существует большой риск, что приложение перестанет работать корректно, поэтому требует после публикации обширных тестов всех функций приложения. В моём случае, этот режим сократил размер программ с 300МБ до 86МБ, но при этом приложение перестало запускать и подавать какие-либо признаки жизни. Отладки тоже не поддалось, к сожалению.

Более подробно можете почитать в этой статье

Источник: https://habr.com/ru/post/561140/


Интересные статьи

Интересные статьи

Радиосхемы на карбиде кремния могут выдержать вулканическую жару Венеры Как художник представляет себе будущий венероход, получающий энергию от ветра, дующего в плотной атмосфере Венер...
Логика развития мобильных приложений заключается в постепенном усложнении функциональной нагрузки на пользовательский интерфейс.Что, в свою очередь, приводит к росту кодо...
Разработчики приложений, работающие на Java, при использовании интерфейса JMS, часто предпочитают работать со Spring Framework. Spring может упростить написание кода новых приложений, предост...
Мы уже рассказывали про Tarantool Cartridge, который позволяет разрабатывать распределенные приложения и паковать их. Осталось всего ничего: научиться деплоить эти приложения и управлять ими. Н...
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...