日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打独立运行包遇到无法trim咋解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景介紹

工作中我用到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的大小(壓縮能力可以),支持雙平臺這個大小可以接受吧!

image

但是問題來了,換成 Microsoft.Data.SqlClient后,運行sqlserver的邏輯會報一個錯:

Column?requires?a?valid?DataType.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的包含運行時的獨立包給放進去

image

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

然后運行:

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

打出來的包同樣是包含獨立運行時的,體積減少到了20M

同樣的方式到mac上進行同樣的操作

image

研究了一下這個打包運行的原理,其實它是將你的依賴全部壓縮放進了它打出來的成果物里了

然后你運行它的時候會解壓出來,在windows平臺的解壓路徑為:C:\Users{User}\AppData\Local\warp\packages\

image

由于它自帶了壓縮功能,所以體積才減少到了20M左右!

以上研究遇到的一個坑點:我剛開始發現的是有個大佬把上面的工具封裝成了一個 dotnet-tool

按照下面的命令進行安裝

$?dotnet?tool?install?--global?dotnet-warp

可以指定r參數來區分平臺

dotnet-warp?-r?win-x64dotnet-warp?-r?osx-x64

這里要注意一點,打包mac的得去mac系統,不要在windows系統操作生成mac端,雖然可以打包成功,但是拿到mac系統運行會報錯。

最后

自從.net跨平臺之后,在很多方面都可以派上用場,可以用來blazor開發chrome插件(基于webassbemly)link,還可以開發idea插件。是不是很好玩!



我是正東,學的越多不知道也越多。歡迎白嫖 順手點個贊吧!

總結

以上是生活随笔為你收集整理的打独立运行包遇到无法trim咋解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。