架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 212|回复: 1

[.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 的控制台项目,如下图:



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

  1. using System;
  2. using static Newtonsoft.Json.JsonConvert;

  3. namespace demo1
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             var user = new UserInfo()
  10.             {
  11.                 Name = "架构师",
  12.                 Blog = "https://www.itsvse.com"
  13.             };
  14.             var json = SerializeObject(user);
  15.             Console.WriteLine(json);
  16.             Console.ReadKey();
  17.         }
  18.     }

  19.     public class UserInfo
  20.     {
  21.         public string Name { get; set; }

  22.         public string Blog { get; set; }
  23.     }
  24. }
复制代码

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



发布单文件可执行文件

方式一:

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

  1. dotnet publish -r win10-x64 /p:PublishSingleFile=true
复制代码


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

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



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

方式二:

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

  1. <Project Sdk="Microsoft.NET.Sdk">

  2.   <PropertyGroup>
  3.     <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
  4.     <PublishSingleFile>true</PublishSingleFile>
  5.     <OutputType>Exe</OutputType>
  6.     <TargetFramework>netcoreapp3.0</TargetFramework>
  7.   </PropertyGroup>

  8.   <ItemGroup>
  9.     <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
  10.   </ItemGroup>

  11. </Project>
复制代码
然后右击点击“发布”按钮即可。


程序集链接

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

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

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

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

  1. <PropertyGroup>
  2.   <PublishTrimmed>true</PublishTrimmed>
  3. </PropertyGroup>
复制代码
.NET Core CLI
  1. dotnet publish -r <rid> -c Release
复制代码


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

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

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


(完)






上一篇:解决ajax无法给外部变量赋值
下一篇:C语言这么厉害,它自身又是用什么语言写的?
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
沙发
发表于 2019-9-29 09:30:44

感谢楼主分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2019-10-21 14:27

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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