蓄势待发本条词是高3阿尔巴尼亚语老师在高等高校统招考试前写在黑板上,高级中学三年努力这么久,是时候迎面而上,冲刺向前。所以,一想到.NET
201陆,脑英里蹦出的第1个词便是它。 .NET 201六 是 .NET
二次质的火速,不管难易,我们须求拥抱变化。

初识 .NET 2016

  • .NET 2016 概览

.NET 201六 作为 .NET 技术最新发展,如下图所示,它最重要含有三大块:

最左侧代表的是 .NET Framework 四.6,WPF、ASP.NET 四.x、ASP.NET Core 1.0
能运作在它上。中间这有些代表的是 .NET Core 技术,ASP.NET Core 1.0 和
Universal Windows
Platform(UWP)能运作在它之上。当然,你也得以创设控制台应用程序运维在.NET
Core 上。最左边是 Xamarin,它是2个基于 Mono 的跨平台移动支付框架。

图片 1

在.NET 20一伍 时,微软为我们带来了崭新的 .NET,它正是.NET Core。.NET Core
的三个重大组成都部队分是新的周转时(Runtime):CoreCL兰德酷路泽。除了接纳 CoreCLEvoque运营时外,.NET 也能被编写翻译成 Native Code。UWP
自动使用那本特性,应用程序在付出到 Windows Store 后被编写翻译成 Native
Code,最后生成优化过后的代码,能够让 应用软件 运营时间加速并能够减去内部存款和储蓄器消耗
。你当然也能编写翻译其余.NET Core 应用程序成 Native Code,并在Linux运行。

在上图的平底,你能够见到有1对事物在.NET Framework ④.陆、.NET
Core、Xamarin 之间共享。比如有个别共享的Libraries,通过 Nuget
包的定义将这几个 Libraries 汇聚在 Package 中供全数的.NET
平台运用。还有1部分运营时组件(Runtime Components)被共享,如 GC 和
RyuJIT,那是三个新的JIT编写翻译器,这么些新的 JIT
编译器不仅比在此以前越来越快,在调节时它还富有越来越好的支撑编辑和三番四遍效劳。那些职能能够在调节时编辑代码并连任调节和测试,而不需求甘休和重复起动进程。CL瑞鹰、CoreCL逍客、.NET
Native 使用 GC 进行实例的销毁以及内部存储器的回收,并且 CL昂Cora 和 CoreCLWrangler 使用
RyuJIT 编译器将 IL 代码编写翻译成 Native Code 。当然,新的编写翻译器 Roslyn
也是共享的。

  • .NET Framework 4.6

.NET Framework 4.陆 作为 .NET Framework 的最新版本,在过去 十多年间,不断被拉长。大家接纳那几个 Framework 塑造 Windows Form
、WPF、ASP.NET 四 等应用程序。就算 ASP.NET Core 应用程序运转在.NET Core
上,但它也能运作在.NET Framework 四.⑥ 上。

若是你想要继续选拔 ASP.NET Web Form 开发应用程序,.那么 NET Framework
四.陆 中的 ASP.NET 肆.六 是你的特级选用。值得注意的是您不可能在.NET Core
上运维 ASP.NET Web Form 应用程序。

  • .NET Core 1.0

.NET Core 一.0(近期是 奥迪Q5C二),是新的.NET,比较于
Mono,它是的确意义上跨平台的兑现。.NET Core
被设计成模块化的艺术,即被剪切成大气的 Nuget
Package。在应用程序中,你说了算须求怎么样Package,并且每十日保持更新和卸载。而.NET
Framework,它是操作系统的1有的,注定不能够实时被更新,同时,过去 10多年件,.NET Framework
参预卓殊多的新职能,它变得尤为大,更不佳的是,它不容许移除不再需求的旧效果。比如旧的集合类不再被使用因为泛型集合类参与,.NET
Remoting 被新的通讯技术 WCF、ASP.NET Web API 替换,LINQ to Sql 被
EntityFramework 替换。而那一个旧技术,平昔存在.NET Framework
中,你不得不全盘接受他们。

  • Xamarin

Mono 是开源社区开发的跨平台.NET Framework,而 Xamarin 是3个创设于 Mono
上跨平台活动选拔开发框架。相信微软收购了 Xamarin 之后,Mono
将取得大力帮衬,.NET Core 在运动端的表现拭目以俟。

利用 .NET Framework 四.陆 编写翻译应用程序

创立 “Hello World”
应用程序是上学1门新技巧的开张营业。在此时,为了越来越好的去通晓.NET
Core,大家不打算去选拔Visual Studio 201五 进行付出。

  • Developer Command Prompt 编写翻译代码

当安装收尾 Visual Studio 后,大家得以透过配套工具 Developer Command
Prompt 使用 C# 编写翻译器编译代码。

1.打开记事本,使用 C# 编写如下代码,命名字为 HelloWorldApp.cs 并保留至
C:\Code 文件夹

class Program { static void Main() { System.Console.WriteLine("Hello World");}}

2.运营 Developer Command Prompt for VS20一伍,键入如下命令:

  • 进入 C:\Code 文件夹 cd C:\Code
  • 使用 C# 编写翻译器编写翻译源代码 csc HelloWorldApp.cs
  • 翻开文件目录结构 dir
  • 输入EXE 名来运行应用程序 HelloWorldApp

运作结果如下所示:
图片 2

留意你的源代码文件 HelloWorldApp.cs,已经编写翻译到程序集HelloWorldApp.exe
中。当您输入 HelloWorldApp 名来运营应用程序,最后被.NET Framework 四.陆和它的 CL奥迪Q7 加载并运营。

  • 采纳 ILDASM 反编写翻译程序集

1.C# 编写翻译器将源代码转换到IL代码后存款和储蓄到程序集中(DLL 恐怕 EXE)。

二.IL 代码口舌就像是汇编语言指令,它们被.NET 的虚拟机约等于CLGL450执行。在运营时,CL揽胜 从程序集中加载 IL 代码,然后 JIT 编写翻译器编写翻译成
Native Code,最终交由 CPU执行。

在 Developer Command Prompt 输入 ildasm
HelloWorldApp.exe,你会合到ILDASM 工具加载编译过后的次第集:

图片 3

双击 MANIFEST 节点,查看元数据:

图片 4

可以看到.NET Metadata 的本子是
四.0.3031玖,并且正视外部的程序集mscorlib,它的版本是肆.0.0.0,上述截图告诉我们,要运营这么些应用程序须要安装.NET
Framework 四.0之上。

关闭 MANIFEST 窗口,再展开 Program 节点,双击 Main 方法:

图片 5

注意IL 指令:ldstr(load string ),nop(no operation
),call,ret(return)。记住IL 最终被 CLR 执行。

使用 .NET Core CLI 编写翻译应用程序

要运用最新的.NET Core Command Line(CLI),请保管安装了.NET Core 和 CLI
Tools。你能够访问 https://dotnet.github.io/ 来为 Windows、Linux、OS X
安装它们。

水到渠成安装.NET Core CLI Tools 之后,能够在 Developer Command Prompt 键入
dotnet help 来 查看具体应用:

图片 6

  • 行使 CLI 创设.NET Core 应用程序

您须要经过 Developer Command Prompt 使用如下命令:

一.重新进入 C:\Code 文件夹 cd c:\code
二.开立新文件夹 mkdir SecondApp
三.进来新文件夹 cd SecondApp
4.施用 CLI 成立.NET Core应用程序 dotnet new
伍.查看目录结构 dir

图片 7

dotnet new 命令创制了2个新的.NET Core
应用程序,包罗七个文本,分别是 Program.cs 和 project.json。

Program.cs 是个简易的控制台应用程序,输出“Hello World”

using System;
namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

而另二个文书:project.json,它是项目布署文件,并以JSON的格式定义了应用程序的中央音信,比如:version、buildOptions、authors、dependencies、frameworks
等。

{
    "version": "1.0.0-*",
    "buildOptions": {
        "emitEntryPoint": true
    },
    "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

上述JSON 格式中,由于 Main 方法作为应用程序的入口(Entry
Point),所以要求将 buildOptions 节点下的emitEntryPoint 属性设置为
true。

dependencies 节点代表行使正视的 packages,默许情状下只添加了
Microsoft.NETCore.App 的信赖。值得注意的是,Microsoft.NETCore.App
是贰个引用类型的Nuget Package,它又引述了其它的Nuget
Package。那样的好处是防止添加大批量的别样package。

frameworks 节点列出了应用程序扶助的
frameworks。默许情形下,应用程序只帮助.NET Core 1.0,以别称netcoreapp壹.0 表示。netcoreapp1.0 下的 imports 节点 引用旧名称
dnxcore50。那允许大家照例能够利用旧名称的 package。

接着,通过dotnet restore 下载所急需的依赖项

因而 project.lock.json,查看具体下载的 package 版本。

为了编写翻译应用程序,使用命令 dotnet build

最后,使用 dotnet run 运维应用程序。

值得注意的是,在 framework 中也足以添加应用程序对其余 frameworks
的支持,添加字符串net四陆,表示近年来的控制台应用程序创设于.NET Framework
四.陆之上:

"frameworks": {
    "netcoreapp1.0": {
        "imports": "dnxcore50"
    },
    "net46":{}
}

遗憾的是,dotnet build
之后,发生了这一个。如下所示(注:当前版本是.NET Core 卡宴C 2),
图片 8

可以看看那些消息是 System.Runtime.Loader 不补助.NET Framework
肆.陆。只是1个很暧昧的新闻,个人预计 Runtime Loader 只帮助 CoreCLKoleos的加载,在 Github(https://github.com/dotnet/corefx/issues/8453
中,也应证了本身的理念。一时半刻的解决方法是将dependencies 节点
移入到frameworks 下的 netcoreapp壹.0 中:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50",
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-rc2-3002702"
        }
      }
    },
    "net46":{}
  }
}

dotnet build 之后,分别生成五个公文夹 net46 和 netcoreapp壹.0,使用
ILDasm(见上一小节)工具,打开文件夹能够阅览他俩中间2个很重点的界别,使用.NET
Framework 的应用程序编写翻译之后为转移蕴涵 IL 的 EXE
应用程序并且重视mscorlib程序集 ,而使用.NET Core
的应用程序编译之后生成包括 IL 的DLL,信赖System.Console 和
System.Runtime 程序集。

最后,通过 dotnet run –framework net46 钦定 famework 的本子为.NET
Framework 四.陆 查看运维结果。

图片 9

除了 dotnet builddotnet run 外,你还是能通过 CLI
打包(dotnet pack)和 发布(dotnet publish)应用程序。

dotnet pack 创造了3个 NuGet Package:

图片 10

它是二个后缀名叫 nupkg 的 Nuget
Package,你能够将它改为.zip,解压查看里面包车型大巴剧情。

dotnet publish 宣布1个可用于铺排.NET 项目,你可以在 project.json
添加 runtime :

"runtimes" : {
    "ubuntu.14.04-x64": { },
    "win7-x64": { },
    "win10-x64": { },
    "osx.10.10-x64": { },
    "osx.10.11-x64": { }
}

下一场使用 dotnet restore 下载内定的
runtimes。当跨平台公布时,通过参数 -r 钦命 runtime,比如 dotnet
publish -r
ubuntu.14.04-x64
,最终将公告之后的公文夹(ubuntu.1四.04-x64/publish)拷贝到钦赐OS 就能够推行,无需安装 .NET Core 和 .NET Core SDK,只需安装.NET Core
依赖的 Libraries
即可

小结

告别.NET
开发一年多,没悟出爆发了那般多不可捉摸的技艺,抓紧时间补充一下。笔者招过人,也求过职,深入体会到国内.NET
的生态环境不给力,希望.NET Core
的面世能为大家指向一条明路,就如丛林里1缕阳光,带来希望。

相关文章

网站地图xml地图