当前位置: 首页 > news >正文

C#:程序发布的大小控制

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

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

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

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

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

目录

一、不打包平台

二、裁剪未使用的代码

三、压缩

四、测试结果

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


一、不打包平台

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

二、裁剪未使用的代码

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

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

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

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

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

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

三、压缩

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

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

        在文件里增加这样一行:

<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>

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

四、测试结果

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

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

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

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

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

(这里是结束)

http://www.lryc.cn/news/251220.html

相关文章:

  • Python中的split()、rsplit()、splitlines()的区别
  • 上位机开发框架:QT与winform/wpf对比
  • Halcon tiff 点云读取以及平面矫正
  • 详解Spring中基于注解的Aop编程以及Spring对于JDK和CGLIB代理方式的切换
  • 百度/抖音/小红书/微信搜索品牌形象优化怎么做?
  • 爬虫学习(三)用beautiful 解析html
  • OSG编程指南<十四>:OSG纹理渲染之普通纹理、多重纹理、Mipmap多级渐远纹理及TextureRectangle矩阵纹理
  • Langchain-Chatchat的安装过程
  • Windows系列:Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传)
  • 最长连续递增序列
  • FreeRTOS入门--任务
  • 4个解决特定的任务的Pandas高效代码
  • 【已解决】AttributeError: module ‘gradio‘ has no attribute ‘Image‘
  • 高级软件工程15本书籍
  • 计网Lesson3 - 计算机网络评价指标与封包解包
  • 深度学习好文记录,反复学习
  • CSS浅谈动画性能
  • 万能的视频格式播放器
  • 设计模式---第五篇
  • .NET8构建统计Extreme Optimization Numerical Libraries
  • 07-原型模式-C语言实现
  • 深度学习与深度迁移学习有什么区别?
  • 创建Asp.net MVC项目Ajax实现视图页面数据与后端Json传值显示
  • 1089 Insert or Merge (插入排序,相邻归并排序,附模拟实现)
  • 基于算能的国产AI边缘计算盒子8核心A53丨17.6Tops算力
  • Eaxyx 让圆球跟随鼠标移动
  • Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术
  • 陪诊系统:基于自然语言处理的患者沟通创新
  • 实用攻略——SD-WAN网络配置步骤详解
  • ​无人机摄影测量