.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序

2019 年 7 月 20 日 DotNet

(给DotNet加星标,提升.Net技能


英文:talkingdotnet.com

译文:cnblogs.com/jRoger/p/create-trimmed

译者:JRoger

.NET Core 提供的发布应用程序选项 self-contained 是共享应用程序的好方法,因为应用程序的发布目录包含所有组件、运行时和框架。


您只需要告诉使用者应用程序的入口 exe 文件,就可以使程序运行起来,而不必担心目标计算机上是否存在.NET Core 运行时和应用框架。目前 .NET Core 3.0 Preview 6 已经推出,也包含了更多新功能。


其中一个有用的功能就是引入了 PublishTrimmed 发布标志。此标志可以很大程序上减少可执行文件的大小并会创建一个修剪过的自包含单体可执行文件。


下面我们来看一下如何发布一个经过修剪的单体可执行文件。


.NET Core 3.0 中发布 self-contained 程序可以使用下面的命令:


dotnet publish -r win-x64 -c Release --self-contained


上面的命令执行之后会在创建的发布文件夹中包含 self-contained 可执行程序所需的所有文件,文件数大概有 100 个左右,如果想要在目标计算机上运行这个应用程序,那就需要复制这个发布文件夹内所有文件,似乎并不是那么方便,而且这些文件占用的空间也不算小。



这个问题在 .NET Core 3.0 Preview 5 中得到了解决。


此版本引入了一个 PublishSingleFile 发布标志,用于生成一个单体 exe 可执行文件。该发布标志的使用方法如下:


dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true


或者在项目文件中配置如下节点:


<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Hello_.NETCore3</RootNamespace>
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>


使用此发布标志后只会生成一个 exe 可执行文件和符号文件。见下图



现在只有一个可执行文件了,但其文件大小有点儿小问题,一个可执行程序接近70MB。


上面说过,在 .NET Core 3.0 Preview 6 中引入了 PublishTrimmed 发布标志,使用该发布选项将不会包含您未使用的类库,以达到减小发布单体文件的尺寸。


您可以将上面的两个命令一起使用,如下:


dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true


或在项目文件中配置以上两个发布标志:


<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Hello_.NETCore3</RootNamespace>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>


使用上面的两个命令后,您会发现,单体可执行文件的尺寸只有 29MB 了。对于简单的控制台应用程序来说,它仍然有点儿大,但请注意,这是一个包含了 .NET Core 运行时的 self-contained 应用程序。



以上就是我要介绍的全部内容了。


原文链接:https://www.talkingdotnet.com/create-trimmed-self-contained-executable-in-net-core-3-0/


参考链接:

https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-6/

https://github.com/mono/linker/blob/master/src/ILLink.Tasks/README.md


推荐阅读

(点击标题可跳转阅读)

C# 管道式编程

ASP.NET Core WebAPI团队协作开发

ASP.NET Core 3.0中支持AI的生物识别安全


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

登录查看更多
0

相关内容

.NET 框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发、快速应用开发、平台无关性和网络透明化的软件开发平台。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
Mask-RCNN模型的实现自定义对象(无人机)检测
计算机视觉life
17+阅读 · 2019年8月12日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
C# 10分钟完成百度人脸识别
DotNet
3+阅读 · 2019年2月17日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
3D Deep Learning on Medical Images: A Review
Arxiv
12+阅读 · 2020年4月1日
Arxiv
5+阅读 · 2019年10月11日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
17+阅读 · 2019年4月5日
Hierarchical Deep Multiagent Reinforcement Learning
Arxiv
8+阅读 · 2018年9月25日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
VIP会员
相关VIP内容
相关资讯
Mask-RCNN模型的实现自定义对象(无人机)检测
计算机视觉life
17+阅读 · 2019年8月12日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
C# 10分钟完成百度人脸识别
DotNet
3+阅读 · 2019年2月17日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
相关论文
3D Deep Learning on Medical Images: A Review
Arxiv
12+阅读 · 2020年4月1日
Arxiv
5+阅读 · 2019年10月11日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
17+阅读 · 2019年4月5日
Hierarchical Deep Multiagent Reinforcement Learning
Arxiv
8+阅读 · 2018年9月25日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Top
微信扫码咨询专知VIP会员