В этой статье поделюсь опытом, как уменьшить размер независящего от сборки приложения на C# в 2 – 4 раза.
Внимание: Сжатие содержимого программы доступно только для self-contained публикаций. А также все действия происходят в Visual Studio Preview 2019.
Опасный режим: удаляет неиспользуемые классы и методы. Имеет риск, что приложение перестанет работать корректно, поэтому требует тестирования всех функций приложения после публикации.
<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. Выставите следующие настройки:
Нажмите кнопку Publish.
dotnet publish -c Release -r win10-x64 -p
ublishTrimmed=True -p:TrimMode=Link -p
ublishSingleFile=true --self-contained true
Более безопасный режим:
dotnet publish -c Release -r win10-x64 -p
ublishTrimmed=True -p:TrimMode=CopyUsed -p
ublishSingleFile=true --self-contained true
Команда 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/
Внимание: Сжатие содержимого программы доступно только для 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)
Нажмите кнопку Publish.
Всё то же самое, только командой
Опасный режим:dotnet publish -c Release -r win10-x64 -p
Более безопасный режим:
dotnet publish -c Release -r win10-x64 -p
Более подробно о том, что происходит за настройками выше
Первые 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/