.Net Core[译文]

Posted zhao1949

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Core[译文]相关的知识,希望对你有一定的参考价值。

http://www.cnblogs.com/Wahitler/p/5612895.html
*********************

什么是.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字符串。
  • 任务类型,例如TaskTask,用来支持异步编程。
  • 基本的线程类型
  • 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 app
  • dotnet 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,用其中的一种语言即可无缝地访问类型与成员。

当前,你可以用下边的两种语言的任意一种开发:

我们打算在未来支持更多的语言。
你有多种开发环境可以选择用来编写app,包括:

.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代码片段,助你快速处理日常编程任务

[小技巧]ASP.NET Core中如何预压缩静态文件

十二个 ASP.NET Core 例子

使用.NET Core创建Windows服务 - 使用官方推荐方式

使用.NET Core创建Windows服务 - 使用Topshelf方式

Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章