前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET Core应用的三种部署方式

.NET Core应用的三种部署方式

作者头像
雪飞鸿
发布2019-10-01 20:01:29
1.5K0
发布2019-10-01 20:01:29
举报
文章被收录于专栏:me的随笔me的随笔

.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磁盘空间:

代码语言:javascript
复制
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磁盘空间:

代码语言:javascript
复制
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。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FDD
  • FDE
  • SCD
  • 命令示例
  • 示例
    • FDD
      • FDE
        • SCD
        • 小结
        相关产品与服务
        内容分发网络 CDN
        内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com