架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19015|回复: 2

[.NET Core] .NET Core 新功能发布单文件可执行文件

[复制链接]
发表于 2019-9-28 16:38:47 | 显示全部楼层 |阅读模式
在前几天,微软发布了 .NET Core 3.0 ,最大的增强功能之一是对 Windows 桌面应用程序的支持(仅限 Windows)。 通过使用 .NET Core 3.0 SDK Windows 桌面组件,可移植 Windows 窗体和 Windows Presentation Foundation (WPF) 应用程序。 明确地说,只有在 Windows 上才支持和包含 Windows 桌面组件。

SDK下载地址:https://dotnet.microsoft.com/download/dotnet-core/3.0

关于 .NET Core 功能介绍链接:

https://docs.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-core-3-0
https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0/

特性包括如下:

  • 使用 C# 构建富交互客户端 Web 应用。
  • 使用 gRPC 创建高性能后端服务。
  • SignalR 现在支持自动重连接和客户端到服务器(client-to-server)流。
  • 使用 OpenAPI 文档为 Web API 生成强类型的客户端代码。
  • 通过框架集成了端点路由。
  • Kestrel 默认启用 HTTP/2。
  • 集成 Web API 和单页应用身份验证支持。
  • 支持证书和 Kerberos 身份验证。
  • 集成新的 System.Text.Json 序列化器。
  • 新的通用主机设置了常见的托管服务,例如依赖项注入、配置和日志。
  • 用于构建长期服务的新 Worker Service 模板。
  • 为每秒请求、总请求、当前请求和失败请求创建了新的 EventCounters。
  • 现在会将托管在 IIS 中的启动错误报告给 Windows Event Log。
  • 请求管道集成 System.IO.Pipelines。
  • 整个技术栈的性能改进。

我们用 vs 2019 新建一个 .net core 3.0 的控制台项目,如下图:

QQ截图20190928160707.jpg

引用 Newtonsoft.Json 包,随便写几行代码,代码如下:


我们右击vs重新生成下,然后打开项目的bin目录,发现会生成几个文件,其中包含:demo1.exe 和 Newtonsoft.Json.dll 文件。

QQ截图20190928161750.jpg

发布单文件可执行文件

方式一:

在项目目录下执行如下命令:



我们打开 C:\Users\itsvse_pc\source\repos\demo1\demo1\bin\Debug\netcoreapp3.0\win10-x64 文件夹,会发现生成了很多dll文件还有一个publish文件夹。

进入publish文件夹,查看 demo1.exe 的大小有 66M,和文件夹外所有的文件大小一样,如下图:

QQ截图20190928161928.jpg

生成的单个执行文件,其实已经包含程序所执行需要的环境,不需要目标电脑在安装sdk了,弊端就是文件大小会变得非常大。

方式二:

右击vs编辑项目文件,增加PublishSingleFile节点配置,代码如下:

然后右击点击“发布”按钮即可。

QQ截图20190928163549.jpg
程序集链接

.NET core 3.0 SDK 随附了一种工具,可以通过分析 IL 并剪裁未使用的程序集来减小应用的大小。

自包含应用包括运行代码所需的所有内容,而无需在主计算机上安装 .NET。 但是,很多时候应用只需要一小部分框架即可运行,并且可以删除其他未使用的库。

.NET Core 现在包含一个设置,将使用 IL 链接器工具扫描应用的 IL。 此工具将检测哪些代码是必需的,然后剪裁未使用的库。 此工具可以显著减少某些应用的部署大小。

要启用此工具,请使用项目中的 <PublishTrimmed> 设置并发布自包含应用:

.NET Core CLI
QQ截图20190928164410.jpg

我们刚才生成 66M 的文件,增加配置后,变成了35M ,减少了 30M 的占用

请务必考虑到使用反射或相关动态功能的应用程序或框架(包括 ASP.NET Core 和 WPF)通常会在剪裁时损坏发生此损坏是因为链接器不知道此动态行为,并且不能确定反射需要哪些框架类型。 可配置 IL 链接器工具以发现这种情况。

最重要的是,剪裁后务必对应用进行测试


(完)






上一篇:解决ajax无法给外部变量赋值
下一篇:C语言这么厉害,它自身又是用什么语言写的?
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-9-29 09:30:44 | 显示全部楼层

感谢楼主分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-10-30 09:14:15 | 显示全部楼层
ReadyToRun 镜像
可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进.NET Core 应用程序的启动时间。

R2R 是一种预先 (AOT) 编译形式。 R2R 二进制文件通过减少应用程序加载时实时 (JIT) 编译器需要执行的工作量来改进启动性能。 二进制文件包含与 JIT 将生成的内容类似的本机代码。 但是,R2R 二进制文件更大,因为它们包含中间语言 (IL) 代码(某些情况下仍需要此代码)和相同代码的本机版本。 仅当发布面向特定运行时环境 (RID)(如 Linux x64 或 Windows x64)的自包含应用时 R2R 才可用。



这里首先把注释掉<PublishTrimmed>,然后添加<PublishReadyToRun>:
QQ截图20191030091354.jpg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-24 14:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表