资讯专栏INFORMATION COLUMN

.net打独立运行环境遇到无法trim遇到的bug

不知名网友 / 3229人阅读

摘要:如何解决呢编辑器解决方案编辑器编辑器介绍如下编辑器编辑器这是一个大佬用写的支持把你的所有依赖打包独立运行时,支持跨平台的。

背景介绍

工作中我用到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的大小(压缩能力可以),支持双平台这个大小可以接受吧!

 

 

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

既然不能加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的包含运行时的独立包给放进去

image
image

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

然后运行:

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

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

image

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

image
image

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

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

image
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插件。是不是很好玩!

 

Enjoy!!!

关注公众号一起学习


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125677.html

相关文章

  • 崩溃bug日志总结2

    摘要:出现错误引发崩溃日志的流程分析这个错误是应用的方法总数限制造成的。 目录介绍 1.1 java.lang.ClassNotFoundException类找不到异常 1.2 java.util.concurrent.TimeoutException连接超时崩溃 1.3 java.lang.NumberFormatException格式转化错误 1.4 java.lang.Illegal...

    sutaking 评论0 收藏0
  • 业务开发中调试方法总结

    摘要:业务开发中的调试方法总结这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。但是如果你的业务经常变化,但是变化的部分并不会影响单元测试,那这种情况下的单元测试性价比就很高。 业务开发中的调试方法总结 这段时间,接触了单元测试,同时业务中遇到了一些需要排错调试的情况,就把自己的经验做个小结。 3种调试方法 狼叔说,常见的三种调试的境界 初级: 打l...

    KaltZK 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<