内容主要来源 https://docs.asp.net/en/latest/conceptual-overview/dotnetcore.html

什么是.NET Core

.NET Core 5 包括模块化的运行时和库实现,是.NET Framework的子集。

他包括一系列的库,称之为“CoreFX”,一个精简、优化的运行时,叫做“CoreCLR”。他们两者都是通过NuGet发布的。根据功能不同CoreFX是分解为不同的包的,一般名称是System.[module].因此带来了.NET Core的 portability,所以可以将应用和CoreCLR一起打包部署,而不依赖与已经安装版本的.NET(也即是windows上的.NET Framework).因为.NET Core是随应用一起打包发布的,所以不同应用可以打包不同版本的.NET Core,也可以单独升级其版本。

CoreFX是组件化的一系列库,每一个组件只有最小依赖(e.g. System.Collections仅仅依赖System.Runtime,而不是System.Xml).这就使得能够在应用发布时实现CoreFX库的最小发布(随CoreCLR一起)。CoreFX includes collections, console access, diagnostics, IO, LINQ, JSON, XML, and regular expression support, just to name a few libraries. 另一个好处就是CoreFX使开发者可以使用一个跨平台的公共库。

.NET Core背后的动机

最早2002年.NET 作为一个单独的Framework发布,后来逐渐针对不同平台发布了不同的版本,如the .NET Compact Framework for mobile devices等。除此之外还有针对Linux、Mac和Native ios 和安卓系统的Mono and Xamarin。对于每一个平台,都有一个单独的.NET栈(包括运行是,framework,app model)。.NET Core的主要目的就是提供一个单一的、模块化的、跨平台的.NET ,使得能够运行在所有平台上。.NET Core是开源项目,Mono社区可以从CoreFX中受益,.NET Core不会取代Mono,但是他允许Mono社区参考和共享某些公共库,而不是复制。

另一个压力是来自服务器端,通过构建CoreFX,允许应用只包含他们所需要的那一部分的CoreFX(也即是pay for play model),因此可以最小化依赖。带来的好处就是,减少补丁和升级数量,以及其带来的影响,也减少了应用大小。

使用.NET Core构建应用

.NET Core可以构建Web app,console app和native mobile app. .NET Execution Environment(DNX)提供了一个块平台的runtime host,能够用其构建基于.NET Core的跨平台应用,运行与Windows,Linux,Mac。DNX是在.NET Core上运行ASP.NET 应用的基础。 事实上DNX是支持交叉编译的,targeting both of these frameworks in a single project。在vs2015中的项目模板就是如此的,在ASP.NET 5的project.json中,frameworks部分,就是包括dnx451和dnxcore50。

"frameworks": {
        "dnx451": { },    这是代表.NET
Framework
        "dnxcore50": { }  这是代表.NET
Core 5(5.0)
},

在项目中,你可以用编译指令#if来判断版本,如下

#if DNX451

//
utilize resource only available with .NET Framework

#endif

可以根据项目需求,可以只使用dnx51或者dnxcore50,但是在ASP.NET 4.6(含)之前的版本都需要使用.NET
Framework.

.NET Core和NuGet

使用NuGet可以更加便捷的使用.NET Core的各个库,这意味着应用可以列出一个只包含自己所需的一个NuGet包列表(以及对应的版本信息)。这个列表可以包含system/framework也可以包含第三方依赖。而且第三方依赖可以express他们对Framework特性的依赖,使得能够在开发和编译过程中获取合适版本的包。举个例子,如果你需要不可变集合,你可以通过NuGet安装System.Collections.Immutable包。NuGet版本也会和程序集版本匹配,会使用semantic versioning

Note:尽管CoreFX可以通过NuGet来获取很多的单独的包,但是他还是或作为一个整体来进行周期性的发布和测试。这种发布相对单独包的发布,很大可能上是频率比较低的,使得有时间可以进行必要的test,fix和distribution process。

总结

.NET Core is a
modular, streamlined subset of the .NET Framework and CLR. It is fully
open-source and provides a common set of libraries that can be targeted across
numerous platforms. Its factored approach allows applications to take
dependencies only on those portions of the CoreFX that they use, and the
smaller runtime is ideal for deployment to both small devices (though it
doesn’t yet support any) as well as cloud-optimized environments that need to
be able to run many small applications side-by-side. Support for targeting .NET
Core is built into the ASP.NET 5 project templates that ship with Visual Studio
2015.

.NET Core简介的更多相关文章

  1. 酷学习笔记——ASP.NET Core 简介

    ASP.NET Core 简介 其实就是说酷好,不好好学,不学好,没饭吃. 新词汇:IoT,Internet of Things,网联网,微软物联网英文网站.微软物联网中文网站

  2. NET Core 简介

    1. 前言 .NET发行至今已经过了十四个年头.随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成. 只是成也Win ...

  3. [翻译] ASP.NET Core 简介

    ASP.NET Core 简介 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin ...

  4. ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程 ← ASP.NET Core 基础教程 ASP.NET Core Windows 环境配置 → A ...

  5. 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)

    一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...

  6. [.net core]简介(转)

    原文地址:https://docs.microsoft.com/zh-cn/dotnet/articles/core/ NET Core 是一个通用开发平台,由 Microsoft 和 GitHub  ...

  7. ASP.Net Core简介

    定义:一个经过精简的.模块化的.NET Framework子集,目的是为了跨平台..NET Core的类库叫做“CoreFX”,更精简的版本叫做“CoreCLR”. ASP.NET Core 是微软的 ...

  8. TDD in .NET Core - 简介

    本文很多内容来自选自TDD实例一书. 预备知识 最好有一些预备知识,例如xUnit,Moq,如何编写易于测试的代码,这些内容我都写了文章:https://www.cnblogs.com/cgzl/p/ ...

  9. ASP.NET Core系列(一): .NET Core简介及安装开发环境

    大家都知道Java是跨平台的,.NET因为不具有跨平台的特性,被越来越多的开发者诟病,之前有各种间接的跨平台的方案,比如mono.但是由于各种兼容问题,最终 .NET Core出现了,它可以让程序在W ...

随机推荐

  1. redis的socket event loop

    很早之前就因为nosql就听说了redis,直到去年才真正去了解,只能说相见恨晚. 因为数据库相关,我以为这应该是个庞然大物,万万没想到,源码不到2M,所以,我不知道该说啥了... 还是来点靠谱的: ...

  2. SQL查询oracle的nclob字段

    使用CONTAINS关键字查询NCLOB字段 SELECT  FORMATTED_MESSAGE    FROM     TBL_LOG WHERE     CONTAINS(FORMATTED_ME ...

  3. 用Margin还是用Padding?

    用margin还是用padding这个问题是每个学习CSS进阶时的必经之路. CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时 ...

  4. 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治

    题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...

  5. BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】

    题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...

  6. CI的多级目录的功能

    https://segmentfault.com/q/1010000008317555?_ea=1621531

  7. 什么是SetUID

    1. 什么是SetUID 我们知道,在linux的命令行下执行“ps”命令时,就会列出当前系统中的所有进程,在其中可以看到每个进程都和用户的真实id关联,实际上,Linux中的每个进程还跟一个称为有效 ...

  8. 使用org.jsoup.Jsoup下载网络中的图片

    package com.enation.newtest; import java.io.BufferedOutputStream; import java.io.File; import java.i ...

  9. PHP持久进程

    在有些业务需求中,一个业务逻辑会涉及很多其他模块,这时可以把不需要返回的数据,扔到后台异步处理(比如注册时邮件验证,发邮件这个过程就可以扔到后台处理). 这个时候可以在后台起一个PHP进程,轮循处理业 ...

  10. [bzoj4514][SDOI2016]数字配对——二分图

    题目描述 传送门 题解: 这个题真的是巨坑,经过了6个WA,2个TLE,1个RE后才终于搞出来,中间都有点放弃希望了... 主要是一定要注意longlong! 下面开始说明题解. 朴素的想法是: 如果 ...