C#:程序发布的大小控制 裁剪 压缩

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


目录

一、不打包平台

二、裁剪未使用的代码

三、压缩

四、测试结果

五、打包成单个文件的问题

六、内置压缩后再用rar压缩的问题


.net不讨喜有个大原因就是.net平台本身太大了,不同版本没有兼容性,程序依赖哪个版本用户就要安装哪个版本,除非你恰好用的是操作系统默认安装的版本------问题是不同版本操作系统默认安装的不一样。

所以打包程序就很头疼,不打包平台程序小,但是用户要单独下载平台,又麻烦又慢。打包平台的话程序又太大了。

有这么几个办法减小程序大小:

  • 不打包平台(假装写一个,免得别人以为我忘这一点),不方便
  • 裁剪未使用的代码,显著缩小程序大小,但必须打包平台(一加一减啊)
  • 压缩,显著缩小程序大小,但是会影响某些程序行为,不是百分百放心

同时使用裁剪和压缩能得到只比不打包平台稍微多一点的程序大小。

注意:winform程序不支持裁剪,按照微软的说法,是因为窗口机制没法从代码分析出来哪些代码用不到,所以压根不会出现"裁剪"选项。发布并不总会成功,还有一些别的因素会导致裁剪失败。

一、不打包平台

这是默认方式。而且并不推荐,没必要惹用户生气,因为我们还有别的手段。

二、裁剪未使用的代码

在项目上右键-【发布】打开发布界面:

要修改配置点击【显示所有设置】:

上面的红圈处选择依赖框架还是独立,"独立"就是把.net平台打包进去,会非常大。

下面的红圈点开设置关键选项:

现在只有一个选项:生成单个文件,选中就只生成一个文件,否则就会有很多很多文件。

把部署模式改成【独立】,文件发布选项多了【裁剪未使用的代码】, 现在可已通过设置选项来测试不同方式生成的程序大小,本文最后我会列出所有测试结果。

三、压缩

压缩不能通过选项设置进行,要直接修改配置文件。

配置文件就是发布设置最上面显示的【配置文件名称】,默认是Properties\PublishProfiles\FolderProfile.pubxml

在文件里增加这样一行:

复制代码
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>

这就启用了压缩。不过压缩不是对每种方式都能起作用的,不起作用的话打包的时候输出会有提示信息。

四、测试结果

发布失败那个试了很多次,也重启过,仍然是失败,所以不知道为什么。依赖框架方式压缩是不起作用的。

独立发布最大106M,裁剪后56.5M,压缩后45.3M,裁剪并压缩24.6M,大小和依赖框架的21.7M相比增加不多。

五、打包成单个文件的问题

我实测发现程序行为不同(程序是在arm64上运行的),程序一开始就卡住了,屏蔽掉与Path有关的几行代码后程序进去了,由于缺乏完整测试,屏蔽掉的代码是否会影响程序也不知道。

这种方式是否还有别的影响?恐怕还是要经过仔细测试才能确定。

六、内置压缩后再用rar压缩的问题

实测内置压缩后再用rar压缩会比不带内置压缩的大4M左右,当然内置压缩后的最终程序小很多,毕竟最终是要解压缩(rar)才能运行的,所以还是要斟酌一下的(不内置压缩可能超过掉电丢失存储区的大小,而压缩包大4M又可能超出掉电不丢失的存储区的大小)。

稍微解释一下:这种设备最大的存储区只有30M,但有个100M左右的虚拟存储区,挂在文件系统里,但数据掉电就会丢失。设备里面用的压缩工具是bz,测试直接用了rar。


(这里是结束)

相关推荐
FuckPatience6 分钟前
C# 报错参数无效
c#
北域码匠15 小时前
PID 控制算法完整详解(C# 原生实现,无第三方库)
c#·pid控制·工控开发·闭环控制·自动控制算法·数字pid·增量式pid
离陌在学C#15 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
asdzx6718 小时前
Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片
java·c#·word
小金子会发光18 小时前
C# WinForms 基于 Socket 手搓 Modbus TCP 调试助手(支持 01/02/03/04/05/06/0F/10)
c#·socket·plc·modbus tcp·工业通信
MyBili19 小时前
游戏报错缺少dll、无法启动?GRLPackage 运行库合集一键修复指南
游戏·.net·directx·运行库·xna·openal·vc++ redis
慧都小妮子20 小时前
PDF图片提取总“褪色“?Aspose.PDF 多层级提取能力详解
pdf·c#·.net·图片处理·文档处理·色彩空间
-银雾鸢尾-1 天前
C#中的反射关键类-Type
开发语言·c#
海盗12341 天前
微软技术周报 · 2026-08-10
microsoft·.net
淡海水1 天前
15-07-YooAsset面试篇-Unity性能优化与内存管理
java·unity·面试·性能优化·c#·游戏引擎