zoukankan      html  css  js  c++  java
  • 发布 .NET 5 带运行时单文件应用时优化文件体积的方法

    自 .NET 发布起,.NET Framework 运行环境就是其摆脱不掉的桎梏。后来有了 .NET Core ,微软终于将自带运行时和单文件程序带给了我们。即便如此,大部分情况下开发者仍然不太满意:一个简简单单的控制台应用程序,甚至只包含一个 Hello World ,附带运行时的单文件程序打包出来就需要 20M+ 。

    .NET 程序的发布受一个名为 发布配置文件 (.pubxml) 的 XML 文件控制,该文件默认不存在,会在第一次在 Visual Studio 中执行发布时创建。该文件会被保存在项目的 Properties/PublishProfiles 目录下,可以在以下微软文档上看到更详细的介绍: 

    https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-5.0

    通过阅读文档和不断尝试,笔者得出了一个可以优化打包文件的发布配置文件:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    https://go.microsoft.com/fwlink/?LinkID=208121.
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>binRelease
    et5.0publish</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifier>linux-arm</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishTrimmed>True</PublishTrimmed>
    <TrimMode>link</TrimMode>
    </PropertyGroup>
    </Project>

    使用以上发布配置,最终发布文件体积从 20M 降低到了 8.7M ,使用 WinRar 压缩之后为 3.33 M 左右。

    你也可以使用下面配置来进一步减小文件体积:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    https://go.microsoft.com/fwlink/?LinkID=208121.
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>binRelease
    et5.0publish</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifier>linux-arm</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishTrimmed>True</PublishTrimmed>
    <TrimMode>link</TrimMode>
    <DebuggerSupport>false</DebuggerSupport>
    <EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
    <EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
    <EventSourceSupport>false</EventSourceSupport>
    <HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
    <InvariantGlobalization>true</InvariantGlobalization>
    <UseSystemResourceKeys>true</UseSystemResourceKeys>
    <TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
    </PropertyGroup>
    </Project>

    详细的裁剪选项可以参看微软的官方文档:

    https://docs.microsoft.com/zh-cn/dotnet/core/deploying/trimming-options

    欢迎来到:码农很忙
  • 相关阅读:
    C学习笔记-typedef
    C学习笔记-typedef
    C语言之联合体
    C语言之联合体
    Browsersync 省时浏览器同步测试工具,浏览器自动刷新,多终端同步
    Gulp学习指南之CSS合并、压缩与MD5命名及路径替换
    es6 添加事件监听
    珠峰
    js添加触摸时间,禁止页面缩放
    百度地图叠加扇形区域,也可以做成异性区域
  • 原文地址:https://www.cnblogs.com/Soar1991/p/14771254.html
Copyright © 2011-2022 走看看