.NET Core 3.0 构建和部署
Default Executables 默认可执行文件
在 dotnet build 或 dotnet publish 期间,将创建一个与你使用的 SDK 的环境和平台相匹配的可执行文件。 和其他本机可执行文件一样,可以使用这些可执行文件执行相同操作,例如:
可以双击可执行文件。
可以直接从命令提示符启用应用程序,如 Windows 上的 myapp.exe,以及 Linux 和 macOS 上的 ./myapp。
下面是一个基于.NET Core 2.2的项目:
当我Build该项目之后,在bin/Debug/netcoreapp2.2目录下有这些文件:
这里没有.exe文件。
下面是一个.NET Core 3.0的项目:
当我build项目后,bin/Debug/netcoreapp3.0目录下有这些文件:
值得注意的就是,这里有一个exe文件,点击它可以直接运行该项目。
而且这个exe文件的大小也很小,这是因为它依赖于.NET Core运行时,它所需要的依赖项在我电脑上是全局可用的。
还有另外一个地方也值得注意,项目所有的依赖也都复制到了这个输出的文件夹里。
Single-file Executables 单文件可执行文件
这种部署方式很方便,、。dotnet publish 命令支持将应用打包为特定于平台的单文件可执行文件。 该可执行文件是自解压缩文件,包含运行应用所需的所有依赖项(包括本机依赖项)。 首次运行应用时,应用程序将根据应用名称和生成标识符自解压缩到一个目录中。 再次运行应用程序时,启动速度将变快。 除非使用了新版本,否则应用程序无需再次进行自解压缩。
下面针对这个.NET Core 3.0的项目,我们修改一下项目属性,来实现Single-file Executables部署:
build的话不会起作用,这个功能仅支持发布(publish):
看一下输出文件夹:
实际上这里只有一个exe文件,没有其它dll文件,而且这个exe文件很大,因为这里面包含了它需要的所有依赖。
Assembly linking 程序集链接
目前这个exe有点大,.NET core 3.0 SDK 随附了一种工具,可以通过分析 IL 并剪裁未使用的程序集来减小应用的大小。
自包含应用包括运行代码所需的所有内容,而无需在主计算机上安装 .NET。 但是,很多时候应用只需要一小部分框架即可运行,并且可以删除其他未使用的库。
.NET Core 现在包含一个设置,将使用 IL 链接器工具扫描应用的 IL。 此工具将检测哪些代码是必需的,然后剪裁未使用的库。 此工具可以显著减少某些应用的部署大小。
要启用此工具,请使用项目中的 <PublishTrimmed> 设置并发布自包含应用:
再次发布后:
可以看到exe文件的大小减小了很多,这是因为这里只包含了这个项目真正用到的依赖。
但是启用这个特性的时候一定要注意,如果项目使用到了反射或相关动态功能(例如 ASP.NET Core 和 WPF),那么通常会在剪裁时损坏。 发生此损坏是因为链接器不知道此动态行为,并且不能确定反射需要哪些框架类型。 可配置 IL 链接器工具以发现这种情况。
最重要的是,剪裁后务必对应用进行测试。
ReadyToRun 镜像
可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进.NET Core 应用程序的启动时间。
这里首先把注释掉<PublishTrimmed>,然后添加<PublishReadyToRun>:
发布:
发布后会得到一个稍微大一点的exe文件,这是因为里面包含了原生代码和IL(中间语言)版的程序。
更详细内容请查看原文链接。
.NET Core 3.0 构建和部署相关推荐
- ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作
ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择"文件" > "新建&q ...
- 【无标题】.Net Core 6.0 WebApi 远程部署到Server2016
这里写自定义目录标题 一.安装IIS 二.安装.net core 运行时及iis支持,直接安装捆绑包 三.创建WebApi网站 四.安装Web Depory.配置远程发布 五.在云服务器上配置安全策略 ...
- Ubuntu GitLab CI Docker ASP.NET Core 2.0 自动化发布和部署(1)
相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...
- .NET Core 3.0 Preview 9 发布
翻译自官方博客 今天,我们宣布推出.NET Core 3.0 Preview 9.就像预览版8一样,我们专注打磨最终版本的.NET Core 3.0,而不是添加新功能.如果这些最终版本看起来不像早期预 ...
- ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
一.前言 最近一两个星期,加班,然后回去后弄自己的博客,把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本计划的学习 Vue 中生命周期的相关知 ...
- 【C#8.0 and .NET Core 3.0 高级编程学习笔记】
@C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...
- [翻译] .NET Core 3.0 Preview 9 发布
原文: Announcing .NET Core 3.0 Preview 9 今天,我们宣布推出 .NET Core 3.0 Preview 9.就像 Preview 8 一样,我们专注于打磨 .NE ...
- Centos7 Docker Jenkins ASP.NET Core 2.0 自动化发布和部署
写在前面 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级 ...
- 边缘化搭建DotNet Core 2.1 自动化构建和部署环境
写在前面 写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器.服务器上搭建了 Centos7 & Docker & Jenki ...
最新文章
- 64位windows与32位windows的区别
- Python-Pandas 如何shuffle(打乱)数据?
- 关于如何解决解决The SDK platform-tools version ((25.0.3)) is too old to check APIs compiled with API 26...
- 美萍超市销售管理系统标准版access数据库密码mp611
- pyinstaller生成exe文件失败
- LeetCode MySQL 1571. 仓库经理
- 关于html中css无法作用的问题
- Python多处理示例
- dos命令实现无限弹窗
- php 仿面包网 源码 飞飞cms_FEIFEI飞飞CMS仿面包网电影网站源码(四色+采集+会员中心+西瓜影音)...
- 2016年第七届java A组蓝桥杯省赛真题
- 云笔记横向评测:印象笔记、有道云笔记、为知笔记、OneNote、Notion
- 安卓APP开发日记1——名为Another的日记APP开发
- Simulink电力电子仿真——(一)概述1
- bp验证码爆破插件二改
- 用于土地使用和土地覆盖分类的landsat8的OLI波段组合的选择
- Pywinauto Guideline
- Echart.js China.js制作中国热力图
- mysql中in条件使用字符串
- excel口令密码如何破解