.NET Core应用的三种部署方式
.NET Core应用提供了三种部署方式:
FDD
FDD:Framework-dependent deployment,框架依赖部署。这种方式针对某个特定版本的.NET Core进行发布,只打包应用本身及.NET Core类库之外的第三方依赖项,需要目标系统上已安装相应的.NET Core运行时。使用dotnet publish
命令时,FDD是.NET Core 2.x的默认发布方式。
除非特殊说明,FDD会使用目标系统上指定.NET Core版本的最新可用.NET Core runtime。
FDE
FDE:Framework-dependent executables,框架依赖可执行程序。这种方式针对某个特定版本的.NET Core及特定平台进行发布,只打包应用本身及.NET Core类库之外的第三方依赖项,需要目标系统上已安装相应的.NET Core运行时。FED适用于.NET Core 2.2及以上版本,是.NET Core 3.x的默认发布方式。使用dotnet publish
命令(除.NET Core 3.x之外)以PDE模式发布应用,需指定下面两个参数:
-r <RID>
该参数使用RID用于指定目标平台
--self-contained false
该参数值为false时,.NET Core SDK会以FDE模式打包应用
SCD
SCD:Self-contained deployment,自包含部署。这种方式会将.NET Core运行时及.NET Core类库随应用一起打包,产生的文件数较多,占用磁盘空间较大,但无需目标系统安装.NET Core运行时。从.NET Core 2.0开始可以使用NET Core globalization invariant mode来减少磁盘空间的占用。
使用dotnet publish
命令(除.NET Core 3.x之外)以PDE模式发布应用,需指定下面两个参数:
-r <RID>
该参数使用RID用于指定目标平台
--self-contained true
该参数值为true时,.NET Core SDK会以SCD模式打包应用
从.NET Core 2.1 SDK(2.1.300)开始,.NET Core支持patch version roll forward(翻译为补丁前滚?)在使用该模式进行打包时,.NET Core工具会自动选择指定.NET Core版本的最新可用.NET Core runtime。如果用于构建的机器上未安装指定.NET Core版本的最新.NET Core runtime,.NET Core工具会从NuGet.org上自行下载。所以,使用该模式进行打包可能会依赖网络。有关patch version roll forward,可参考: Self-contained deployment runtime roll forward
命令示例
Publish Mode | SDK Version | Command |
---|---|---|
Framework-dependent deployment | 2.x | dotnet publish -c Release |
Framework-dependent executable | 2.2 | dotnet publish -c Release -r <RID> --self-contained false |
3.0 | dotnet publish -c Release -r <RID> --self-contained false |
|
3.0* | dotnet publish -c Release |
|
Self-contained deployment | 2.1 | dotnet publish -c Release -r <RID> --self-contained true |
2.2 | dotnet publish -c Release -r <RID> --self-contained true |
|
3.0 | dotnet publish -c Release -r <RID> --self-contained true |
可以使用dotnet publish --help
命令来查看帮助文档:
示例
创建控制台应用(这里使用.NET Core 2.2):dotnet new console
。
可以在项目文件(.csoroj)中看到使用dotnet publish
发布应用时默认使用的目标框架:
可以将目标框架更改为任意被支持的Target Framework Moniker (TFM)。针对多个目标框架的发布,可参考:Publishing basics和How to specify target frameworks
FDD
执行命令:dotnet publish -o pub -c Release
可以看到文件夹中只有4个文件,占用8K磁盘空间:
pub
│ app.deps.json
│ app.dll
| app.pdb
| app.runtimeconfig.json
FDE
执行命令:dotnet publish -o pub -c Release -r win-x64 --self-contained false
可以看到,相比FDD,文件夹中多了exe文件,共占用140K磁盘空间:
pub
│ app.deps.json
│ app.dll
| app.exe
| app.pdb
| app.runtimeconfig.json
SCD
执行命令:dotnet publish -o pub -c Release -r win-x64 --self-contained true
文件夹中有217个文件,占用65.8M空间。
小结
FDD与FDE类似:只打包应用本身及.NET Core类库之外的第三方依赖项,都需要目标系统中已安装相应版本的运行时。但有以下不同:
FDE会生产可执行文件(如,Windows下的exe),可直接运行程序,FDD打包后则需要借助dotnet utility来启动,如:
dotnet app.dll
。因为不同的系统的可执行程序格式不同,所以针对Windows系统以FDE模式打包应用无法直接放到Linux中运行。FDD只生成依赖特定运行时的程序集,只要目标系统中安装了相应的运行时,都可以运行打包后的程序,与系统无关。
相比于FDD和FDE,SCD将应用、.NET Core运行时、.NET Core类库、第三方依赖均打包在一起,会产生一个比较大的包。因为自身已经包含了运行时,可以直接放到支持.NET Core的系统中运行,无论目标系统中是否已安装.NET Core运行时。SCD打包的应用自成一体,互相隔离、互不影响。
FDE与SCD在打包时都会生产针对特定平台的可执行文件。所以,在使用dotnet publish
命令时,需要指定-r <RID>
参数。这里可执行文件的作用与dotnet
命令类似,是启动.NET Core应用的HOST,在Windows中,可执行程序名称通常为:<PROJECT-FILE>.exe,.NET Core应用名为<PROJECT-FILE>.dll。
推荐阅读
.NET Core application deployment
Publish .NET Core apps with the CLI
Developing Libraries with Cross Platform Tools
.NET Core应用的三种部署方式的更多相关文章
- NBIoT三种部署方式【转】
转自:https://472880.kuaizhan.com/89/34/p441944286fccf2 本文作者:吴老司撩通信 本文来源:EETOP NB-IoT支持在频段内(In-Band).保护 ...
- Weblogic的三种部署方式
Weblogic的三种部署方式 在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...
- Tomcat的三种部署方式
Tomcat是目前web开发中非常流行的Web 服务器,也就是tomcat在部署项目的时候,必须要把应用程序中所用到的jar包放到tomcat的lib目录下,然后再一起部署到服务器上. 那么tomca ...
- tomcat 三种部署方式以及server.xml文件的几个属性详解
一.直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.如果你想要修改这个默认 ...
- SAP Fiori应用的三种部署方式
封面图片来自Google搜索,关键字: Fiori Deployment 方式1 On premise环境下以BSP应用作为Fiori应用部署和运行的载体 在SAP成都labs我曾经担任过CRM这几个 ...
- Web应用三种部署方式的优缺点
方式一:修改server.xml文件 优点: 配置速度快,只需要在server.xml文件中添加<Context>标签,在其中分别配置path虚拟路径和docBase真实路径然后启动Tom ...
- Spark三种部署方式
- MyEclipse中web服务器的三种配置方式
初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...
- 使用Kylin构建企业大数据分析平台的4种部署方式
本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...
随机推荐
- 12 redis搭建主从服务(ubuntu)
什么是主从服务 一个master可以拥有多个slave,一个slave可以拥有多个slave,如此下去,形成了多级服务器集群架构 master用来写数据, slave用来读数据, 经统计:网站的读写比 ...
- 一个手写的Vue放大镜,复制即可使用
一个手写的vue放大镜 组件使用less,请确保已安装loader 本组件为放大镜组件,传参列表为: width: 必传,设置放大镜的宽高(正方形),放大区域等同,放大倍数为2倍 picList:必传 ...
- Lambada和linq查询数据库的比较
1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq: from s in Student ...
- Codeforces Round #481 (Div. 3) A. Remove Duplicates
题目地址:http://codeforces.com/contest/978/problem/A 题解:给一串长度为n的数组,然后删去相同的数字(从右往左). 方法:题目n和数组ai给的范围都很小,所 ...
- poj 1062 昂贵的聘礼(floyd path的应用)
题目链接:http://poj.org/problem?id=1062 题意就不解释了中问题. 这题用dfs也行.但是感觉还是floyd比较好一点主要是他们交易是有条件的交易总的等级差不能超过m 所以 ...
- 2017 ACM/ICPC Asia Regional Qingdao Online 1003 The Dominator of Strings hdu 6208
The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java ...
- to_char()、to_date()的区别
to_char 是把日期或数字转换为字符串 to_date 是把字符串转换为数据库中得日期类型 还记得以前初次接触oracle时对一些函数还不是很熟悉,老是弄错,比如在mysql中可以运行,但在ora ...
- 了解css中px、em、rem的区别并使用Flexible实现vue移动端的适配
本人java菜鸟一名,若有错误,还请见谅. 1.px和em和rem的定义和区别 px:px像素,是相对单位,相对于屏幕的分辨率而言,也就是说,当屏幕的分辨率不同那么px相同,实际看到的大小也会不同. ...
- 【Offer】[55-2] 【平衡二叉树】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如, ...
- 【Offer】[11] 【旋转数组的最小元素】
题目描述 思路分析 Java代码 代码链接 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...