厚积薄发这词是高三英语老师在高考前写在黑板上,高中三年努力这么绵长,是时候迎面而上,冲刺向前。所以,一想到.NET
2016,脑海里跳出之率先单词就是她。 .NET 2016 是 .NET
一蹩脚质的便捷,不管难易,我们需要拥抱变化。

初识 .NET 2016

  • .NET 2016 概览

.NET 2016 作为 .NET 技术时发展,如下图所著,它要包含三杀块:

最好左边代表的是 .NET Framework 4.6,WPF、ASP.NET 4.x、ASP.NET Core 1.0
能运作于她达到。中间就有的代表的是 .NET Core 技术,ASP.NET Core 1.0 和
Universal Windows
Platform(UWP)能运作在其之上。当然,你呢得以创建控制台应用程序运行于.NET
Core 上。最右边是 Xamarin,它是一个冲 Mono 的跨平台移动支付框架。

json 1

以.NET 2015 时,微软呢咱带了崭新的 .NET,它便是.NET Core。.NET Core
的一个主要片段是初的运作时(Runtime):CoreCLR。除了运用 CoreCLR
运行时他,.NET 也能叫编译成 Native Code。UWP
自动使用此特点,应用程序在付给至 Windows Store 后吃编译成 Native
Code,最终生成优化了后的代码,可以被 APP 启动时间加快并可以削减内存消耗
。你当为会编译其他.NET Core 应用程序成 Native Code,并以Linux运行。

以上图的底部,你得看有一些东西在.NET Framework 4.6、.NET
Core、Xamarin 之间共享。比如有共享的Libraries,通过 Nuget
包的定义将这些 Libraries 汇集在 Package 中供有的.NET
平台应用。还有部分运转时组件(Runtime Components)被共享,如 GC 和
RyuJIT,这是一个新的JIT编译器,这个新的 JIT
编译器不仅于以前又快,在调试时它们还存有更好之支撑编辑和继续效力。这个意义可以调节时编辑代码并连续调试,而无欲停止和还开动进程。CLR、CoreCLR、.NET
Native 使用 GC 进行实例的绝迹以及内存的回收,并且 CLR 和 CoreCLR 使用
RyuJIT 编译器将 IL 代码编译成 Native Code 。当然,新的编译器 Roslyn
也是共享的。

  • .NET Framework 4.6

.NET Framework 4.6 作为 .NET Framework 的风行版本,在过去 10
多年里,不断被增长。我们以这 Framework 构建 Windows Form
、WPF、ASP.NET 4 等应用程序。尽管 ASP.NET Core 应用程序运行在.NET Core
上,但她呢会运行在.NET Framework 4.6 上。

倘若你想只要持续行使 ASP.NET Web Form 开发应用程序,.那么 NET Framework
4.6 中之 ASP.NET 4.6 是若的极品选项。值得注意的凡你不可知于.NET Core
上运行 ASP.NET Web Form 应用程序。

  • .NET Core 1.0

.NET Core 1.0(目前凡是 RC2),是新的.NET,相比于
Mono,它是当真含义及跨越平台的兑现。.NET Core
被规划成模块化的方式,即给剪切成大气的 Nuget
Package。在应用程序中,你控制用什么
Package,并且天天保持更新和卸载。而.NET
Framework,它是操作系统的平等组成部分,注定不克实时被更新,同时,过去 10
多年起,.NET Framework
加入大多之初职能,它换得尤为大,更糟糕的凡,它不可能移除不再需要的原来效果。比如原的集合类不再受运用以泛型集合类加入,.NET
Remoting 被新的通信技术 WCF、ASP.NET Web API 替换,LINQ to Sql 被
EntityFramework 替换。而这些原本技术,一直存在.NET Framework
中,你只能全盘接受他们。

  • Xamarin

Mono 是开源社区开发的跨平台.NET Framework,而 Xamarin 是一个构建于 Mono
上跨平台活动使用开发框架。相信微软收购了 Xamarin 之后,Mono
将取大力支持,.NET Core 在动端的展现等。

动用 .NET Framework 4.6 编译应用程序

创建 “Hello World”
应用程序是上学一门户新技巧的开篇。在此时,为了还好之去理解.NET
Core,我们无打算去行使Visual Studio 2015 进行支付。

  • 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 VS2015,键入如下命令:

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

运行结果如下所示:
json 2

专注你的源代码文件 HelloWorldApp.cs,已经编译到程序集HelloWorldApp.exe
中。当您输入 HelloWorldApp 名来运转应用程序,最终被.NET Framework 4.6
和它们的 CLR 加载并运行。

  • 运 ILDASM 反编译程序集

1.C# 编译器将源代码转换成IL代码后存储到程序集中(DLL 或者 EXE)。

2.IL 代码语就像汇编语言指令,它们被.NET 的虚拟机也就算是
CLR执行。在运行时,CLR 于程序集中加载 IL 代码,然后 JIT 编译器编译成
Native Code,最后到由 CPU执行。

以 Developer Command Prompt 输入 ildasm
HelloWorldApp.exe,你见面看出ILDASM 工具加载编译过后之主次集:

json 3

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

json 4

可看到.NET Metadata 的本是
4.0.30319,并且依赖外部的次集mscorlib,它的版本是4.0.0.0,上述截图告诉我们,要运行是应用程序需要安装.NET
Framework 4.0以上。

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

json 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 来 查看具体运用:

json 6

  • 使 CLI 创建.NET Core 应用程序

公需要通过 Developer Command Prompt 使用如下命令:

1.重复登 C:\Code 文件夹 cd c:\code
2.创办新文件夹 mkdir SecondApp
3.进入新文件夹 cd SecondApp
4.施用 CLI 创建.NET Core应用程序 dotnet new
5.翻看目录结构 dir

json 7

dotnet new 命令创建了一个初的.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,以别名
netcoreapp1.0 表示。netcoreapp1.0 下之 imports 节点 引用旧名称
dnxcore50。这允许我们还可以以初名称的 package。

接着,通过dotnet restore 下充斥所待的依赖项

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

以编译应用程序,使用命令 dotnet build

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

值得注意的凡,在 framework 中吗堪增长应用程序对任何 frameworks
的支撑,添加字符串net46,表示目前的控制台应用程序构建于.NET Framework
4.6之上:

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

遗憾的凡,dotnet build
之后,发生了异常。如下所示(注:当前本是.NET Core RC 2),
json 8

足见到那个信息是 System.Runtime.Loader 不支持.NET Framework
4.6。只是一个大笼统的消息,个人猜 Runtime Loader 只支持 CoreCLR
的加载,在 Github(https://github.com/dotnet/corefx/issues/8453)
中,也应证了自家的观点。暂时的解决办法是将dependencies 节点
移入到frameworks 下的 netcoreapp1.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 和 netcoreapp1.0,使用
ILDasm(见上同一略节)工具,打开文件夹可以见见她们中间一个百般重要的界别,使用.NET
Framework 的应用程序编译之后吧变化包含 IL 的 EXE
应用程序并且依赖mscorlib程序集 ,而若用.NET Core
的应用程序编译之后转包含 IL 的DLL,依赖System.Console 和
System.Runtime 程序集。

最后,通过 dotnet run –framework net46 指定 famework 的本为.NET
Framework 4.6 查看运行结果。

json 9

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

dotnet pack 创建了一个 NuGet Package:

json 10

它们是一个后缀名为 nupkg 的 Nuget
Package,你可用她改变吧.zip,解压查看里面的情。

dotnet publish 发布一个可用于部署.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.14.04-x64/publish)拷贝到指定
OS 就可以尽,无需安装 .NET Core 和 .NET Core SDK,只需要安装.NET Core
依赖的 Libraries
即可。

小结

告别.NET
开发同年多,没悟出出了这般多不可思议的技巧,抓紧时间补充一下。我造成了口,也求过职,深切体会到国内.NET
的生态环境不给力,希望.NET Core
的面世会也咱靠为同一长长的明路,就如森林里同样详尽阳光,带来希望。

相关文章

网站地图xml地图