.Net Core程序的部署(FDD与SCD)
最近打算做一个公司的代码走查工具,思前想后觉得正好可以当作一个Core的实践机会,于是上官网看了下资料,顺便作了一下笔记方便以后查阅。
注1:这里的Core程序部署指的是.Net Core而非Asp.Net Core。
注2:本人已跟随官方文档更新。
一,.Net Core的部署形式
Core的应用程序部署有两种形式:
1,Framework-dependent deployment([Core Framework]依赖式部署)(FDD)
2,Self-contained deployment(独立式部署)(SCD)
从名字就看得出来他们的区别,第一种(FDD)是需要部署环境下已经安装.Net Core,而第二种(SCD)在发布时就包含了对应平台的框架。
二,Framework-dependent deployment([Core Framework]依赖式部署)
来看看如何以FDD的方式部署一个Core程序。
首先建立一个新的Core程序
(此处不会详细说明,如果不会的可以参考 此处 )
Program.cs如下,很简单的HelloWorld。
using System;
using static System.Console; namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
WriteLine("HelloWorld");
}
}
}
在程序所在目录下执行:
dotnet restore
dotnet build(或者dotnet run)
测试通过后输入
dotnet publish -f netcoreapp1.0 -c release
dotnet publish -f netcoreapp1.1 -c release (1.1版本)
来进行发布。
发布之后进入到你的程序目录的 bin/release/netcoreapp1.0(1.1)/publish 下,你会发现多了一些dll,他们会自动取project.json(*.csproj)所在的路径名。
运行命令
dotnet dotnetcore-getstarted.dll(这里要换成你的项目文件夹名)。
可以看到我们的HellorWorld程序已经跑起来了。
三,Self-contained deployment(独立式部署)(SCD)
(Core1.0版本,1.1版本在之后)
程序还是上面的HelloWorld,我们打开 project.json 修改一下配置,添加上 runtimes 节点,并且移除framework下的type节点。
改造之后的文件看上去是这样的。
关于runtime节点:此处填写的"win7-x64"是RIDs( Runtime IDentifiers ),你可以在引用页下面找到自己对应的RID。
然后运行
dotnet build(或者dotnet run)
需要注意的是,build是可以指定编译环境的如:
dotnet build -r win10-x64
如果你不指定,会从project.json中读取目标平台的参数。
编译完成后,它会在你的程序目录下生成如下路径 /bin/debug/netcoreapp1.0/<runtime_identifier> ,生成调试文件。
测试成功后,使用下面的命令发布:
dotnet publish -c release
你也可以指定目标平台,如果没有指定那么它会去project.json里读取。
现在进入到程序目录的 /bin/release/netcoreapp1.0/win7-x64/publish 下查看,你会发现产生的文件了除了exe之外还有一大堆core framework的模块dll。
如下:
在该路径下运行下你的exe:
成功输出了HelloWorld。
(Core1.1版本)
打开*.csproj文件,在 <PropertyGroup>
节点下追加 <RuntimeIdentifiers> 节点如下
使用以下命令来恢复相应的依赖
dotnet restore
然后可以使用发布命令来发布对应平台的发布包
dotnet publish -c Release -r win7-x64
dotnet publish -c Release -r osx.10.11-x64
它会在 .\bin\Release\netcoreapp1.1\<runtime_identifier> 路径下生成相应的程序和所需的Core环境。
四,对比
文件体积
很明显,由于SCD自带了core所以大小查了很多,在FDD下的程序只有8K,而后者有45MB。
对Core依赖性
FDD下的程序需要目标平台已经安装了core,而SCD不需要。
对目标环境的控制
由于SCD自带了Core所以能很好地控制宿主环境,防止由于目标平台的Core差异导致的一些意外。
对第三方引用库的支持
两者都能很好地支持,但都存在一个需要注意的地方,第三方库的目标平台需要与当前程序的一致。
五,总结
官方的推荐是使用FDD,这样的方式能使程序更小更简洁,也是可移植的(portable ),在多数情况下,FDD是优先选择。
SCD适用于一些网络相对封闭的场景比如医院或者企业内部网络,这时候自带Core进行产品发布是一个不错的选项。
不过其实在Docker盛行的这个年代,SCD让我觉得有些鸡肋。
题外话:早就觉得project.json文件跟以往的风格太不相称了,终于在Core1.1里又换回了熟悉的.csproj,顺带干掉了.xproj,真是大快人心。
有兴趣的同学可以点击 这里 参考原文。
.Net Core程序的部署(FDD与SCD)的更多相关文章
- 来个干货——使用VS2019发布.NET Core程序并部署到IIS的最新教程
使用VS2019发布.NET Core程序并部署到IIS,不管你是使用.NET Core开发的是Web API还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.NET Core ...
- 关于.net core程序的部署
最近发布.net core程序的时候,发现它是可以独立部署的,它支持如下两种部署方式: 依赖框架的部署FDD.只发布我们的程序,运行前用户需要手动安装.net core runtime. 独立部署SC ...
- 把Asp.net Core程序代码部署到Ubuntu(不含数据库)
今天记录一下第一次把.net core 程序发布到linux系统.linux用的是ubuntu Server 18.04版本.运行的IDE是vs 2019,发布出来是.net core 2.2版本. ...
- 使用VS 2019发布.net core程序并部署到IIS的最新教程
不管你是使用.net core开发的是web api还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.net core程序部署到IIS的朋友,可以看看这篇手把手教你部署.net ...
- 如何优雅的利用Windows服务来部署ASP.NET Core程序
上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...
- Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署
运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...
- Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署
运行环境 照例,先亮底 centos:7.2 cpu:1核 2G内存 1M带宽 辅助工具:xshell xftp 搭建.net core运行环境 .net core 的运行环境我单独写了一篇,请看我的 ...
- ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
一.创建项目 本篇文章介绍如何将一个ASP.NET Core Web程序部署到Windows系统上.这里以ASP.NET Core WebApi为例进行讲解.首先创建一个ASP.NET Core We ...
- 运行Vue在ASP.NET Core应用程序并部署在IIS上
前言 项目一直用的ASP.NET Core,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用ASP.NET Cor ...
随机推荐
- 单例模式(Singleton)看了就懂
单例,故名思议,一个只能创建一个实例的类. 单例被广泛应用于Spring的bean(默认).线程池.数据库连接池.缓存,还有其他一些无状态的类如servlet. 一个没必要多例的类实现了单例可以节约空 ...
- Play使用
play框架 打包命令: play war e:/codes/cn.ngmc.frontend -o f:/backup_ngmc/20160614frontend_001Dev; 即:p ...
- oracle-外连接left join的应用
需求 自助设备交易统计 输入项 类型 可为空 备注 机构 选择 Y 采用下拉框的形式 终端号 手输 Y 与柜员号二选一 交易柜员号 手输 与终端号二选一 时间 选择 N 时间区间 状态 多选 设备状态 ...
- Apache2.4 + Tomcat7 负载均衡配置
一.配置tomcat 多启动 1.下载免安装版 tomcat7 http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.81/bin/apache-t ...
- htt p第一章概述
http的概述 1 web客户端与服务器是如何通信 2 web资源来自的何方 3 web事务是怎样的工作的 4 http通信所使用的报文结构 5 底层tcp的传输的结构 6不同的http协议体 什么是 ...
- linux 命令随笔 ls cd pwd mkdir rm mv cp cat nl
Linux 命令练习 ls命令 ls就是list的简写,目的是打印当前目录下的清单 格式 ls[选项][目录名] 常用参数 -a –all 列出目录下的所有文件,包括以 . 开头的隐含文件 -l 除了 ...
- appium整理文档
from appium import webdriver import time,unittest,HTMLTestRunner class Testlogin(unittest.TestCase): ...
- java集合系列——Map介绍(七)
一.Map概述 0.前言 首先介绍Map集合,因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的). 1:介绍 将键映射到 ...
- 实例讲解webpack的基本使用第三篇
这一篇来讲解一下webpack的htmlWebpackHtml插件的使用. 先来思考一个实际问题:我们现在在index.html引用的js文件是写死的.但是我们每次打包后的文件都是动态的,那么我们怎么 ...
- uvalive 3029 City Game
https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵 ...