.Net Core[译文]
Posted zhao1949
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Core[译文]相关的知识,希望对你有一定的参考价值。
什么是.Net Core平台?
.Net Core是一个模块化的,跨平台的,开源实现的.Net Framework,它可以在Windows设备上运行,也可以在Linux和OS X上运行。不同于传统的.Net Framework(特点:庞大的,系统级的,是一个只能跑在Windows上的运行时环境),你可以用.Net Core创造以多平台为目标的组件化的库和应用程序,并且.Net Core可以与应用程序一起部署。
.Net Core特性
让我们从宏观上看看.Net Core的特性
跨平台支持
.NET Core 应用程序可以同时跑在32位和64位的Windows平台上,也可以跑在OS X和Linux上。
相反的,基于传统.Net Framework编写的应用程序只能跑在Windows上。注意的是UWP通用应用程序借助.Net Core的实现,也只能跑在Windows桌面程序,平板和Windows phone手机上。
开源
.Net Core的RunTime(CoreCLR)和基础类库都是开放源代码的,另外.Net Core的源代码都是免费获得的,这些意味着:
- 设计注释,功能规格,还有特定实现文档都是公开的
- .Net Core的代码评审(Code review)是公开的
- 您可以通过使用GitHub的提供的功能,将bug公开,对源代码提出您的建议,而且你可以提交新特性的请求,或者你自己写的代码都可以提交。
- 你也可以下载所有的源代码在你的机器上编译。Runtime与基础类库,还有一些工具可以在任何平台上编译。
控制台Apps
传统的.Net Framework可以在Windows上创建运行创建控制台apps,.Net Core同样可以,但是.Net Core改善了控制应用程序:
- 跨平台:控制台程序可以跑在Windows,OS X和Linux
- 原生编译:将托管程序的好处与原生C/C++应用程序的性能相结合
安装简单
因为.Net Core不是一个操作系统的组件,现在安装:
- 不需要管理员权限
- 不需要触碰系统组件了,也就是说不需要向操作系统的系统目录和注册表中写文件了
- 复制一些文件到目标计算机更简单了,或者将原生framework编译进你的app。
这样,新的开发者不到一分钟就可以入门.Net了,包括下载Framework和tools。可以从这里。
发布部署简单
作为运维人员,去部署一个开发部门给你的.Net应用程序的时候,你首先要做的就是去服务器检查.Net framework版本是否符合要求,如果不符合就需要安装一个能运行这个程序的基础版本,这些会给运维人员带来很大的困扰
相比之下,。Net core有两种发布部署方式:
Portable Apps
在部署一个portable app的时候,你除了.Net Core库之外,只需要部署你的程序和它的依赖就可以。
在目标机器上为了将Portable Apps跑起来需要安装.Net Core。你不需要提前去考虑你的app支持哪个平台,因为.Net Core就是一个独立的组件。
在.Net Core里,Portable Apps是默认的程序类型。
Self-contained Apps
Self-contained
apps包含了所有的依赖,.Net Core runtime也会作为软件的一部分.由于你的APP中内置了.Net
Core,所以不管你要部署的那台机器上安装没安装.Net Core都可以运行,而且就算之前的机子上有人安装了.Net Core,你的.Net
Core类库也是与别人的.Net Core类库隔离开的。
这种方式的前提得是你的程序里内置了对应平台的.Net Core,比如你要在OS
X上部署,你的APP里需要内置OS X对应的.Net Core,如果你内置的.Net Core是Linux版本的,那你就不能在OS
X上边部署,这就要求你必须先考虑好,你的应用程序面向的平台。
.Net Core组件
和 传统的.Net Framework非常像,.Net Core由一个叫CoreCLR的公共语言运行时(Common language runtime)组成。和.Net Framework一样,.Net Core中关键的也是类库。.Net Core关键的是CoreFX,这是一个模块化的类库集,而非单一的.Net framework类库。这样就可以你的程序需要什么库就加载什么库,不需要的不会加载。
公共语言运行时(The Common Language Runtime)
.Net Core中的公共语言运行时——CoreCLR是一个轻量级的运行时,提供了好多和传统.Net Framework的运行时相同的服务。这些相同的服务包含:
- 一个垃圾回收器,它提供了内存自动管理。垃圾回收器按需分配和释放内存;你不必通过程序去做这些。不像C++,需要自己去管理操作内存的分配和释放。.Net Core也用了和.Net Framework相同的垃圾回收器,更多信息请访问Garbage Collection
- 一个just-in-time(JIT)编译器,编译IL或者.Net中间语言(intermediate language)到机器码。在某些架构中,JIT编译器支持SIMD硬件加速。
- 一个异常处理机制,允许你通过try/catch语句处理异常。
类库(The Class Library)
.Net Core的类库与.Net Framework的类库除了有一处主要的不同点之外,其余的非常相似。
不同在于:
传统的.Net Framework有很多类库是属于操作系统的一部分,并且它是通过Windows 自带的Windows update更新。
在.Net Coe中,它是按照功能组织的模块的个人库。
Microsoft.NetCore.App 被包含在runtime里边了,它包含了开发所有APP基本的类型,这些类型包括:
- 基础类型,比如bool类型,签名与不签名的整型,浮点型和char结构
- String类型:在.Net Core中,一个字符串是UTF-16编码单元的序列。.Net Core还包括了许多编码类型,这些编码类型可以允许你将UTF-16编码字符串转换成其他编码的字节数组,例如:你可以用UTF8Encoding class将.Net Core的string字符串转换成utf-8编码的字节数组,用来表示Linux上的string字符串。
- 任务类型,例如Task和Task,用来支持异步编程。
- 基本的线程类型
- Console Class,用来支持开发console apps.
另外的一些库,需要通过Nuget包来安装
.Net Core工具(.Net Core Tools)
.Net
Core包含了一个跨平台的命令行SDK,名字叫做.Net Core CLI(Command-Line
Interface).这个CLI是编写.Net
Core应用程序的一组对Unix友好的工具。它让C#编译器和Nuget包管理工具变得抽象,变得抽象的意思是你感觉不到编译器和包管理工具的存在,应
用程序就编写好了。他同样可以与.Net原生工具紧紧集成在一起来产生高性能的原生app和库。
CLI带来的好处是开发者可以不用安装大型的
IDE就可以编译和测试他们的代码,这在不是自己的电脑或者生产服务器上是极好的。visual studio code与visual
studio在底层都是用的CLI,你可以根据你的需要选择不同的IDE.比如你可以直接通过文本器来使用CLI,或者你可以用IDE开发,编辑器内部调
用CLI.
大多数情况下,你直接使用.Net Core CLI就是通过给dotnet.exe
提供参数,下边是dotnet.exe
可以使用的命令:
dotnet --help
:显示关于.Net Core CLI命令行的信息dotnet new
:初始化一个C#项目dotnet new --lang F#
:初始化一个F#项目dotnet restore
:为你的app还原所有的依赖dotnet build
:编写一个.Net Core appdotnet publish
:发布一个portable或者self-contained app。(查看【部署简单】章节)dotnet run
:从源代码中运行app-
dotnet pack
:在你的app中创建一个Nuget包dotnet.exe
有扩展模型,允许你添加额外的命令。
语言支持和开发环境(Language Support and Development Environments)
.Net Core是语言无关的:任何以.Net Core为目标的语言都是可以用来开发.Net Core应用程序的,通过不同的编程语言开发的app,用其中的一种语言即可无缝地访问类型与成员。
当前,你可以用下边的两种语言的任意一种开发:
- C#,基于.NET Compiler Platform,也成为Roslyn
- F#.
我们打算在未来支持更多的语言。
你有多种开发环境可以选择用来编写app,包括:
- 一个简单的文本编辑器,例如在Windows系统上的Notepad,或者Wordpad
- 一个程序员的编辑器,例如需要C#扩展的Visual studio Code
- 一个集成开发,调试,测试的环境,比如 Visual Studio 2015 Update 2
.NET Core and the .NET Framework
为了更好的感知.Net Core是什么,将它与.Net framework相比较:
.Net Core
包含CoreCLR,一个可提供基础服务的轻量级运行时(runtime),尤其自动内存管理,垃圾回收器,还有一个基础的类型库。
包
含了CoreFx,一套个人模块化组装,你可以安装需要将其添加到你的app中,与.Net Framework 4.x不同,.Net
Framework 4.x总是使整个.Net Framework类库可用,.Net
Core只需选择你想要的。例如,如果你正在开发一款基于矢量的应用,你可以下载System.Numerics.Vectors
包,而不是需要一个很大类库的花销,这样可以显著的减少你app的体积和他的依赖项。
适用于各种各样的现代应用程序,对内存和储存有限制的小型设备起作用
可以利用若干的技术来开发应用,比如asp.net core
开发web应用,Windows communication Foundation(WCF)
开发与现有的WCF服务相关联的应用,workflow foundation(WF)构建工作流。
可以变成app本地。换句话说就是.Net Core版本可以紧紧与你的app相结合,这可以减轻好多版本问题。
.NET Framework 4.x
包含公共语言运行时(CLR),一个相当大的运行时,可以提供内存管理,隔离应用程序域(application domain),大量的应用程序服务。
包含了.Net Framework类库,这个类库包含了成千上万个的类与成员,不仅非常大而且又是一个整体,不论你的app用了单个类型或者他们的成员(或者大多数app利用了一小部分函数),他们都是始终加载并且可以随时访问的。
适 用于传统的Windows桌面应用程序,包括Windows forms(winforms)和Windows Presentation Foundation(WPF)应用程序,可以运用许多技术来开发应用程序,例如,ASP.NET和ASP.NET Web Form构建web应用程序,Windows Communication Foundation (WCF)构建包含soap的服务,Workflow Foundation (WF), 构建工作流。
在一个给定系统中全局可用。换句话说,即使一个app中包含了一个特定版本的.Net
Framework安装器,但是假如安装器发现它不存在还是会安装完整的.Net
framework,并且会独立于app维护。这就会产生版本问题,特别地是一个app遭遇了一个没有预想的版本,或者一个app跑在了之前没有开发
的.Net Framework版本上。
从Windows8开始,.Net Framework作为操作系统的一个组件安装,并且通过Windows update升级。对于不同的Windows里边内置不同的.Net Framework版本,更多的信息请访问.NET Framework System Requirements.
总结:
虽然.Net Framework 4.6.2预览版和.Net Core是面向不同的平台,代表着不同的app开发和部署方法,但是他们都遵守 .Net标准1.5。这意外着他们彼此能够提供一个高度的兼容性与统一行为。尤其:
- 有经验的.Net 开发者想要开发不同设备和平台的应用程序的时候,可以很容易适应.Net Core的开发。
- .Net Core开发者可以很容易的过渡到用.Net Framework开发Windows桌面程序、平板和手机的方式上。
- 用.Net Framework或者.Net Core写的类库可以很容易的在另外一个平台工作。
.Net Core实施(.NET Core具体实现)
许多的开发技术依赖.Net Core的可定制实现。当你用这些技术开发Apps的时候,你也许不会意识你是在利用.Net Core的好处:
ASP.Net Core
.ASP.Net Core是一个模块化的asp.Net版本,它结合了ASP.NET MVC and ASP.NET Web API.它可以同时运行在.Net Framework与.Net Core上边,它被设计用来构建高性能的云和微型服务;在.Net Framework中,它不是打算作为asp.net的替代者的。有关更多的ASP.Net Core信息,请访问Introduction to ASP.NET Core..NET Native
。 对于用C#和Visual Basic编写的Universal Windows Platform (UWP)应用程序,.NET Native是一个编译和部署技术。.Net Native将Apps编译成原生代码,静态资源文件放入应用程序集中,这些都是.Net Core和另外一些第三方的正在使用的代码。有关更多.Net Native的信息请访问Compiling Apps with .NET Native.Universal Windows Platform (UWP) apps
。Universal Windows Platform允许你构建一个运行在Windows桌面,Windows平板设备,Windows phone手机上的app。这些应用可以上传到Windows store中。UWP 应用程序通过.Net Native为他们各自的平台编译原生代码,有关更多的信息,请访问 Get started with Windows apps。
原文:https://dotnet.github.io/docs/getting-started/what-is-dotnet.html
以上是关于.Net Core[译文]的主要内容,如果未能解决你的问题,请参考以下文章
译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务
使用.NET Core创建Windows服务 - 使用官方推荐方式