linux下的单文件数据库,关于 .NET 发布单文件应用

关于 .NET 发布单文件应用

单文件应用简介

.NET Core 3.x 发布的单文件应用是自解压程序, 解压路径貌似是通过 System.IO.Path.GetTempPath() 来确定的:

Windows 系统 %TEMP%\.net\

macOS 系统 /var/folders/s8/q4c00lhx3k384hngtv9pmwv40000gn/T/.net/

Linux 系统 /var/tmp/.net/

.NET Core 3.x 发布的单文件应用偶尔会出现无法运行的错误, 需要删除上面目录中对应的 app 目录, 再运行就可以了;

.NET 5.0 发布的自单文件应用可以直接运行,不需要再解压;

单文件应用相关的几个编译属性

PublishSingleFile 是否发布为单文件应用;

SelfContained 发布的单文件应用是否包含运行时, 不包含运行时会显著减小发布文件的大小, 但是要求目标计算机必须安装 .NET 运行时, 这个属性是 .NET 5.0 新增的;

PublishTrimmed 是否对发布的单文件应用进行裁切, 通过删除依赖项中不使用的部分以达到减小发布文件的大小, 但是可能会出现错误, 这个属性设置为 true 时,需要对发布后的文件测试;

PublishReadyToRun 是否对发布后的文件进行 aot 编译, 转换成对应平台本地化的可执行程序, 但是不能跨平台使用, 比如不能在 linux 系统上对目标为 windows 系统的应用进行 aot 编译, 这个属性也是 .NET 5.0 新增的;

文件大小

.NET Core 3.x 发布的单文件应用文件最小大概是 30 兆左右, 和 Go 发布的 10 兆左右的单文件应用相比确实大一些, 但是如果在发布之后用 7zip 压缩一下, 也是 10 多兆, 和 Go 发布的单文件应用不相上下。

.NET 5.0 发布的单文件应用大小也差不多是这样子的。

发布单文件测试

测试环境的操作系统为 Ubuntu 20.04.1 LTS , 安装 .NET 5.0.100-preview.8.20417.9 , 以一个控制台程序为例, 发布命令为

dotnet publish -r osx-x64 -c Release \

-p:PublishSingleFile=true \

-p:PublishTrimmed=true \

-p:SelfContained=true \

-p:PublishReadyToRun=false \

-p:DebugType=None -o ./bin/Publish/osx-x64

经过测试, 使用 .NET 5.0 Preview 8 发布的单文件应用, 如果应用稍微复杂一些, 只有在目标是 Linux 系统时, 发布结果只有一个可执行文件, Windows 和 macOS 都会额外带上几个小尾巴。

当输出目标为 Linux 系统时, 发布的结果为:

YourApp

当输出目标为 Windows 系统时, 发布的结果可能为:

YourApp.exe

mscordaccore.dll

coreclr.dll

clrjit.dll

clrcompression.dll

而当输出目标为 macOS 系统时, 发布的结果可能为:

YourApp

libclrjit.dylib

libcoreclr.dylib

libSystem.IO.Compression.Native.dylib

libSystem.Native.dylib

libSystem.Net.Security.Native.dylib

libSystem.Security.Cryptography.Native.Apple.dylib

libSystem.Security.Cryptography.Native.OpenSsl.dylib

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值