打独立运行包遇到无法trim咋解决

decca6962c1fc6a54cf9f42291182f83.png

背景介绍

工作中我用到kotlin写代码,在orm上ktorm是一款非常优秀的操作db的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率,这款idea插件的主体逻辑是.net开发的(没错是跨平台的.net)。因为db-schema的解析逻辑我很在以前写的一个visualstudio的插件就搞过了,所以改改就行了!

这里也算是提供给大家另外一个思路去开发idea或者rider插件路吧:

就是不管你用什么语言开发逻辑,然后把你的逻辑打包成可以独立运行,然后使用Process进行套壳调用就行了。

如何进行套壳调用请参考我写的:ktorm的idea代码生成器插件

代码位置:src/main/kotlin/CodeGen.kt

遇到的问题

来自一个issue Mac上Sqlserver运行出错,可能是配置问题?

因为以前都没有在mac机器上测试过,所以才没有发现这个bug:

原因是:sqlserver客户端驱动得从System.Data.SqlClient换成 Microsoft.Data.SqlClient

因为后者才是跨平台的

好了,.net自从跨平台开始就已经支持打包独立运行时了。我改好bug后按照往常一样用下面的命令打包:

  • windows平台:dotnet publish -r win-x64 -c Release --self-contained true

  • mac平台:dotnet publish -r osx-x64 -c Release --self-contained true

  • linux平台:dotnet publish -r linux-x64 -c Release --self-contained true

由于上面的命令打的包很大,所以我加了下面几个参数

  • /p:PublishSingleFile=true (打包成单个文件)

  • /p:PublishTrimmed=true (打包的时候去掉不必要依赖减少体积)

  • /p:IncludeNativeLibrariesForSelfExtract=true(用到指定平台native环境依赖也一起打包到单个文件)

这样打出来的单个平台的独立运行包就会从70M左右变成20M左右,因为我的idea插件是要支持windows和mac这2个平台的,所以需要mac平台20M和windows平台20M都要同时打进一个jar包后大概是18M的大小(压缩能力可以),支持双平台这个大小可以接受吧!

51e045215c87905bf0ec8e75be167d6a.png
image

但是问题来了,换成 Microsoft.Data.SqlClient后,运行sqlserver的逻辑会报一个错:

Column requires a valid DataType.
08344b281a356a5d35616c8e1f093ef6.png
image

因为本次改动只是换了一个依赖,所以肯定是这个依赖不能Trim,果然把Trim的开关给去掉之后就没有这个报错了。

找了下相关资料说是可以针对某个依赖不Trimmer

<ItemGroup><TrimmerRootAssembly Include="Microsoft.Data.SqlClient" /></ItemGroup>

不过即使加了这个也没有解决!有哪位大佬知道怎么搞请留言教育下我

既然不能加trim的话那包就太大了。如何解决呢

解决方案

https://github.com/dgiagio/warp

介绍如下:

Warp lets you create self-contained single binary applications 
making it simpler and more ergonomic to deliver your application to your customers. 
A self-contained binary is specially convenient when the technology you use, 
such as Node.js, .NET Core, Java and others, 
contain many dependencies that must be shipped alongside your application.Warp is written in Rust and is supported on Linux, Windows and macOS.

这是一个大佬用Rust写的支持把你的所有依赖打包独立运行时,支持windows,mac,linux跨平台的。

使用方式:

首先准备好你要打包的目录,这里我新建一个warp文件夹,然后把没有trimmer的包含运行时的独立包给放进去

f6f59a5ce2ce985f977a6ee2b229f9db.png
image

然后去大佬的github上下载windows平台的warp-packer.exe

然后运行:

warp-packer.exe --arch windows-x64 --input_dir warp --exec AntOrmGen.exe --output AntOrmGen.exe

打出来的包同样是包含独立运行时的,体积减少到了20M

c0e11319004c100ff3f5b2a7843ee4a5.png

同样的方式到mac上进行同样的操作

1392af60fd0df0e72664ae6724a5f05a.png
image

研究了一下这个打包运行的原理,其实它是将你的依赖全部压缩放进了它打出来的成果物里了

然后你运行它的时候会解压出来,在windows平台的解压路径为:C:\Users{User}\AppData\Local\warp\packages\

73832b71286d3516a1336c22ed759d4f.png
image

由于它自带了压缩功能,所以体积才减少到了20M左右!

以上研究遇到的一个坑点:我刚开始发现的是有个大佬把上面的工具封装成了一个 dotnet-tool

按照下面的命令进行安装

$ dotnet tool install --global dotnet-warp

可以指定r参数来区分平台

dotnet-warp -r win-x64
dotnet-warp -r osx-x64

这里要注意一点,打包mac的得去mac系统,不要在windows系统操作生成mac端,虽然可以打包成功,但是拿到mac系统运行会报错。

最后

自从.net跨平台之后,在很多方面都可以派上用场,可以用来blazor开发chrome插件(基于webassbemly)link,还可以开发idea插件。是不是很好玩!

f70297993c057d818ebf25f045eaee4b.png


我是正东,学的越多不知道也越多。欢迎白嫖 顺手点个赞吧!3b44f28cdab96679f1177f1a67753dd0.png78c271ee2965d5fabac8fb96ac73cab4.pnge60f6d1c06f1b21815c190b39e3458b8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用html制作班级课程表实例,在网页制作中用表格制作一张课程表如下图。

侠客岛的含笑 Document (2013)学年第(2)学期 课程表上午一&nbsp下午三&nbsp晚上五&nbsp

打破校史!这位参与发表学校首篇Science的博士小姐姐,近日一作再发Nature

全世界只有3.14 % 的人关注了爆炸吧知识本文由科研大匠&#xff08;Id:keyandajiang&#xff09;综合整理自西南交大新闻网、官微、扬华研究生新闻中心导读&#xff1a;12月10日&#xff0c;Nature发表了西南交通大学材料科学与工程学院博士毕业生杨倩&#xff08;现为英国曼彻…

2022版Win11重磅升级!

微软宣布 Windows 11 2022 年更新将重点改进 WinUI 的性能。包括但不限于 Windows 11 文件资源管理器的启动速度、右键桌面、日期和时间弹出、音量调整、操作中心和通知中心等响应体验等。WinUI 的全称为Windows UI 库&#xff0c;是适用于 Windows 桌面应用程序和 UWP 应用程序…

Mysql Engine【innodb,myisam】

2019独角兽企业重金招聘Python工程师标准>>> Innodb,Myisam都是Mysql数据库存储的引擎&#xff0c;Innodb支持事务等数据库高级特性&#xff0c;Myisam不支持&#xff0c;但比较快速。 ISAM 是一个定义明确且历经时间考验的数据表格管理方法&#xff0c;它在设计时就…

ALV Styles in Field catalogue using OOPS

转自http://www.saptechnical.com/Tutorials/ALV/Styles/demo.htm By Swarna S, Tata Consultancy Services *&---------------------------------------------------------------------* *& Report ZALV_STYLES * *…

自称“房奴”的博士靠开店卖SCI论文10年盈利近百万,论文买卖你怎么看?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;中国青年报、武汉晚报 首席记者杨佳峰导读&#xff1a;10年前&#xff0c;一位自称“房奴博士”的刚毕业博士生在网上开启了他的SCI售卖小铺。每篇 1-2 万元&#xff0c;声称一年内卖出去的论文中有 8 篇都进了SCI索…

既生瑜何生亮 access_token VS refresh_token

中国有句老话, 既生瑜何生亮, 既然有我周瑜在世, 为什么老天还要一个诸葛亮啊&#xff1f;同样的, 众所周知, 在 OAuth 2.0 授权协议中, 也有两个令牌 token , 分别是 access_token 和 refresh_token, 为什么已经有了 access_token, 还需要 refresh_token 呢?我们先看下面两者…

关于计算机软件系统的知识,二、计算机软件系统基本知识

一、计算机软件系统图示咱们先来直观的看一下&#xff0c;我就直接上图了打开今日头条&#xff0c;查看更多精彩图片计算机软件系统(一)系统软件在说系统软件之前我想用一张图让大家清晰的了解下&#xff0c;计算机硬件系统与软件系统的关系&#xff1a;计算机硬件系统与软件系…

Nature评选年度十大科学发现:北师大博士凭借天眼研究入选!

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;Bio生物世界、北京师范大学新闻网、百度百科、北京师范大学官网近日&#xff0c;Nature 盘点了2020年度十大科学发现&#xff0c;这其中即包括新冠病毒研究、冷冻电镜突破、压力导致白发的原因、HIV治疗、银河系中的…

Android之集成友盟推送功能

友盟是中国最大的移动开发者服务平台,为移动开发者提供免费的应用统计分析、社交分享、消息推送、自动更新、在线参数、移动推广效果分析、微社区等app开发和运营解决方案。 如何快速集成友盟推送功能&#xff1a; 1. 注册友盟账号 友盟开发者账号的注册地址:http://www.umeng.…

Win11手机应用大改!全新界面来袭

在 Windows 11 中&#xff0c;应用商店、画图、照片、计算器等系统内置应用都获得了全新的改进&#xff0c;这回终于轮到你的手机应用了。在今年 9 月的微软 Windows 11 硬件暨全新 Surface 设备发布会上&#xff0c;微软曾简要地展示了 Windows 11 内置应用 Your Phone&#x…

serialization机制

首先说明一下序列化的知识&#xff1a; java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中&#xff0c;使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中&#xff1b;然后在需要的时候&#xff0c;可以根据字节流中的信息来重…

java2的7次方怎么表示_静态市盈率要怎么看?

静态市盈率是估值一个公司质地的指标&#xff0c;同时它也就是大家常说的市盈率。它体现的是一个企业按照目前的盈利水平&#xff0c;我们买入后需要多长时间才能回本。那么静态市盈率高好还是低好呢&#xff1f;静态市盈率低好&#xff0c;高就意味着该股高估了。静态市盈率是…

中国科幻扛鼎之作,原来真的不止刘慈欣

▲ 点击查看50年前的某天&#xff0c;一个小孩和一群大人一起仰望着晴朗的天空&#xff0c;看着中国第一颗人造卫星“东方红一号”&#xff0c;默默地担心它会撞到其他星星。而这份小小的担心&#xff0c;成了他后来开始创造科幻的动力和梦想。这个仰望晴空的小孩叫刘慈欣。如果…

程学旗 计算机,徐明伟-青年科学家奖-中国计算机学会

2010CCF青年科学家奖获奖者徐明伟 教授清华大学分别于1994年和1998年在清华大学计算机科学与技术系获工学学士和工学博士学位。现为清华大学计算机系教授&#xff0c;博士生导师&#xff0c;网络所所长&#xff0c;计算机学会YOCSEF AC委员&#xff0c;中国通信标准化协会技术管…

.net6给winform带来的新功能

首先简化了Program文件&#xff0c;引入了全局命名空间&#xff0c;但顶级语句由于Main函数的特性[STAThread]没有引用进来。namespace WinFormsDemo {internal static class Program{/// <summary>/// The main entry point for the application./// </summary>[…

男生的哪个“不要”是真的不要?

1 每天一个被炒小技巧&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 今天你能接到水算我输&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 如何形容自己没钱&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 猜中了开头没猜中结…

Git之如何解决Error:pathspec ‘/layout/radar_chart.xml‘ did not match any file(s) known to

不废话&#xff0c;先爆错误图片 问题产生原因&#xff1a; 我把android studio里面的项目提交到github里面的时候&#xff0c;出现了了error: pathspec app/src/main/res/layout/radar_chart.xml did not match any file(s) known to git.&#xff0c;因为我一开始新建了一个文…

江诗丹顿geneve系列_江诗丹顿的另一面

江诗丹顿在售表款目录里&#xff0c;不算阁楼工匠定制系列&#xff0c;你猜最贵的是哪一款&#xff1f;​答案不是包含三问、万年历和陀飞轮功能的传袭系列超卓复杂腕表&#xff0c;而是一枚具有简单时分功能的高级珠宝表款。打开江诗丹顿的官方微信公众号&#xff0c;进入微信…

程序内存一直在泄漏,原来是异步死循环了 !

一&#xff1a;背景 1. 讲故事上个月有位朋友找到我&#xff0c;说他的程序出现了内存泄漏&#xff0c;不知道如何进一步分析&#xff0c;截图如下&#xff1a;朋友这段话已经说的非常言简意赅了&#xff0c;那就上 windbg 说话吧。二&#xff1a;Windbg 分析 1. 到底是哪一方面…