厚积薄发,拥抱.NET 2016_实用技巧

初识 .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 的跨平台移动开发框架。

在.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

运行结果如下所示:

注意你的源代码文件 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 工具加载编译过后的程序集:

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

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

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

注意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 来 查看具体使用:

使用 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

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),

可以看到异常信息是 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 查看运行结果。

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

dotnet pack 创建了一个 NuGet Package:

它是一个后缀名为 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 的出现能为我们指向一条明路,就像森林里一缕阳光,带来希望。

本文为木宛城主原创。
原文地址:http://www.cnblogs.com/OceanEyes/p/dotnet_2016_overview.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索.net
2016
pes2016实用过人技巧、实况2016实用过人技巧、实况足球2016实用技巧、拥抱幸福电视剧2016、感恩2016 拥抱2017,以便于您获取更多的相关知识。

时间: 2024-09-08 02:46:30

厚积薄发,拥抱.NET 2016_实用技巧的相关文章

谷歌浏览器你不知道的5个实用技巧

对于一款浏览器软件来说,能够快速.安全.稳定的浏览网页自然是最重要的,正如Chrome浏览器在介绍中所描述的一般.不过,如果这样你就满足了,那就太没追求了,别看Chrome浏览器的界面非常简洁,它可以实现的功能可远不止那么简单. 连邦免费下载 谷歌浏览器你不知道的五个实用技巧 Chrome浏览器自动更新 使用最新版的Chrome浏览器可以获得最稳定的浏览体验,所以及时升级就显得格外重要.由于Chrome浏览器的版本更新较快,人送外号"版本帝",所以很多用户都觉得用Chrome要经常下载

2345好压解压文件的几个实用技巧

  相信很多网友都非常熟悉2345好压的文件压缩跟压缩包解压功能,那您知道可以使用2345好压在文件压缩的过程中的一些使用技巧吗?比如说:一个大的压缩包内有很多文件,只需要解压其中的几个文件夹的时候,该怎么操作呢?一起来看看今天小编为大家整理的2345好压解压文件的几个实用技巧! 一:如何设置所有的压缩包都解压到指定目录: 电脑上的压缩包多如牛毛,每个压缩包解压后都会产生一个文件夹,何不让将这些压缩包都统一解压到一个目录下呢?其实这很容易,只要你打开好压主程序--工具--设置--"压缩标签栏&q

CSS实用技巧及常见问题

个人总结的一些css实用技巧及必须得注意的事项: 1.注释须知:html中注释不能这样写: 复制内容到剪贴板 代码: <div></div><!--------这是错误写法-------><div></div><!--=======这是正确写法========-->这种写法,FF中会忽略其下面的内容详见:http://www.bluebirdsky.cn/article.asp?id=153.2.CSS注释切记在/*之后及*/之前空一

实用技巧:PHP中调用Java类的两种方法

Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点. 1.php的Java模块 php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如: <?php$system=new Java("java.lang.System");print "Java ver

百度百科帐号升级三个实用技巧

百度百科对网站优化的好处不必多说,相信大家都知道.但是在百科里添加链接的难度,大家更是深有体会,太难了! 怎样有效的在百科里添加网站的链接?一个高等级的百科帐号,是你加链接通过率大幅提升的根本.下面介绍自己升级百度百科帐号的三个实用技巧,用这三个技巧,就能很快的升到百科四级帐号,并可加入核心用户,轻松的给自己网站加链接啦. 技巧一.巧做任务 百度百科任务有成长任务.活动任务.我们把帐号申请下来,马上就去接成长任务.三级以前,你基本只围绕完成任务来做就行啦.完成任务后,有丰厚的经验值奖励哦. 任务

Asp.net实用技巧(2)

asp.net|技巧   1. 在Asp.net实用技巧(1) 中提到了如何刷新父页面,那么如果要刷新父页面的父页面的父页面了?那就是刷新祖先页面RefreshAncestorPage. RefreshAncestorPage#region RefreshAncestorPage        /**//// <summary>        /// 刷新指定的祖先页面,注意是"祖先页面"            /// </summary>           

Windows XP的23招实用技巧

往往我们经常使用碎片整理使windows运行的更快.但现在市场上出售的7200转硬盘,在寻道和传输两方面做了改进,有很多型号还附带有一个8m缓存,而且winxp使用的ntfs文件系统比fat系统更有效率.因此,碎片整理对提升电脑性能的作用已经非常有限.下面给出能够大幅提升电脑性能,让winxp运行更快捷 .更可靠的23招实用技巧,希望对您有所帮助 : 1)在系统中安装ultra-133硬盘加速扩充卡或带有8m缓存的ata硬盘,可以有效减少系统的启动时间. 2)把内存增加到512m以上. 3)确定

Firefox和IE通用的三则网站重构实用技巧

Firefox和IE通用的三则网站重构实用技巧-CSS教程 使用zoom.overflow解决IE6.IE7.FF下嵌套容器清除浮动问题 我们经常碰到一个容器外面套一个边框,边框高度随容器高度变化,但是当边框内容器设置了浮动属性后,外框就不跟随变化,这时就需要清除浮动.给外边框容器加上overflow:auto的属性,可以解决IE7和FF下的清除浮动问题,但是IE6下不生效,我们需要使用IE的一个私有属性zoom使IE5.5 的浏览器达到外框跟随变化的效果. 需要注重的几个细节问题,例如我们建立

PS色相调整最实用技巧

  PS色相调整最实用技巧         工具/原料 Adobe PhotoShop软件 电脑 方法/步骤 在学习之前,大家有必要先认识一下下面的图片.里面的RGB,CMY.就不多说了.这张图里的数字是经过我改过的,主要就是为了方便大家理解.是为了和色相调节相匹配.这里的数值相当于色相的数值.-180--0--180.和这张图的角度相对应.这张图可以看成每两个颜色之间相差60度. 首先,做一个试验,新建一个图层,Ctrl+J复制图层,一般复制一下图层会比较安全,最好养成习惯.绘制三种颜色的矩形