.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 basicsHow 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

Target frameworks

Cross-platform targeting

Developing Libraries with Cross Platform Tools

.NET Core应用的三种部署方式的更多相关文章

  1. NBIoT三种部署方式【转】

    转自:https://472880.kuaizhan.com/89/34/p441944286fccf2 本文作者:吴老司撩通信 本文来源:EETOP NB-IoT支持在频段内(In-Band).保护 ...

  2. Weblogic的三种部署方式

    Weblogic的三种部署方式     在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...

  3. Tomcat的三种部署方式

    Tomcat是目前web开发中非常流行的Web 服务器,也就是tomcat在部署项目的时候,必须要把应用程序中所用到的jar包放到tomcat的lib目录下,然后再一起部署到服务器上. 那么tomca ...

  4. tomcat 三种部署方式以及server.xml文件的几个属性详解

    一.直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.如果你想要修改这个默认 ...

  5. SAP Fiori应用的三种部署方式

    封面图片来自Google搜索,关键字: Fiori Deployment 方式1 On premise环境下以BSP应用作为Fiori应用部署和运行的载体 在SAP成都labs我曾经担任过CRM这几个 ...

  6. Web应用三种部署方式的优缺点

    方式一:修改server.xml文件 优点: 配置速度快,只需要在server.xml文件中添加<Context>标签,在其中分别配置path虚拟路径和docBase真实路径然后启动Tom ...

  7. Spark三种部署方式

  8. MyEclipse中web服务器的三种配置方式

    初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通 ...

  9. 使用Kylin构建企业大数据分析平台的4种部署方式

    本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...

随机推荐

  1. cookies和sessionstorage和localstorage区别

    相同点:客户端都会存储 不同点 不同点 存储大小 有效时间 数据与服务器交互方式 cookies <=4K 在设置cookie过期之前一直有效(无论窗口浏览器是否关闭) 正常情况下,cookie ...

  2. Codeforces 337D

    题意略. 思路: 本题着重考察树的直径.如果我们将这些标记点相连,将会得到大树中的一个子树.我之前只知道树内的点到直径上两端点的距离是最远的,其实,在 整个大树中,这个性质同样适用,也即大树上任意一点 ...

  3. 漫话:如何给女朋友解释什么是"锟斤拷"?

    漫话:如何给女朋友解释什么是"锟斤拷"? ​ 周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话. 过了一会,女朋友回来了,她拿出手机,给我看了她在超市拍的 ...

  4. 利用PIL库创建空白图像

    背景 最近,想自己生成带位置坐标的文字数据集来训练文本位置探测网络. 理想情况是,给文字加盐噪声,背景不需要加噪声,所以需要创建一个空白的背景.将文字放在空白背景上,然后利用opencv加噪声. 解决 ...

  5. 深入浅出TypeScript(5)- 在React项目中使用TypeScript

    前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...

  6. PHPOffice 导入

    1.因为Phpexecel已经停止维护,所以要使用心得phpoffice; 2.注意引入 use PhpOffice\PhpSpreadsheet\Helper\Sample; use PhpOffi ...

  7. mariadb 离线安装

    [root@localhost local]# cd /var/local[root@localhost local]# lsmariadb[root@localhost local]# cd /ma ...

  8. Spring Boot与Spring MVC集成启动过程源码分析

    开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...

  9. 小白的消费为何被迫升级?-java数据类型的转换

    背景 小白最近有点烦恼,原因也很简单,不知道为何?小白的消费不知不觉被迫升级了,请看费用清单: for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; ...

  10. Shiro使用Session缓存

    Shiro的Session缓存主要有两种方案,一种是使用Shiro自己的Session,不使用HttpSession,自己实现Shiro的Cache接口和Session缓存等:另外一种是直接使用spr ...