- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章厚积薄发,拥抱.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” 。
1
2
3
4
5
6
7
8
9
10
11
|
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 等.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
{
"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之上:
1
2
3
4
5
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 中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"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 :
1
2
3
4
5
6
7
|
"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的文章就讲到这里了,如果你想了解更多关于厚积薄发,拥抱.NET 2016的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
创建使用.NET框架的asp.net页面时,访问该页面的客户端是否需要在其计算机上安装.NET框架? IE。用户访问www.fakesite.com/default.aspx,如果他们没有安装框架,他
我阅读了很多不同的博客和 StackOverflow 问题,试图找到我的问题的答案,但最后我找不到任何东西,所以我想自己问这个问题。 我正在构建一个应用程序,其中有一个长时间运行的工作线程,它执行一些
已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我一直想知道为什么微软为这样一个伟大的平台选择了一个如此奇怪的、对搜索引擎不友好的名称。他们就
.Net Framework .Net .NET Standard的区别 1、.NET Framework 在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套
如果有选择的话,您会走哪条路? ASP.NET Webforms + ASP.NET AJAX 或 ASP.NET MVC + JavaScript Framework of your Choice
我有一个 Web 服务,它通过专用连接通过 https 使用第三方 Web 服务,我应用了 ServicePointManager.ServerCertificateValidationCallbac
为什么我应该选择ASP.NET Web Application (.NET Framework)而不是ASP.NET Core Web Application (.NET Framework)? 我在
我在网络上没有找到任何关于包含 .NET Standard、.NET Core 和 .NET Framework 项目的 .NET 解决方案的公认命名约定。 就我而言,我们在 .NET 框架项目中有以
.NET Compact 是 .NET 的完美子集吗? 假设我考虑了屏幕大小和其他限制并避免了 .NET Compact 不支持的类和方法,或者 .NET Compact 是一个不同且不兼容的 GUI
我已经阅读了所有我能找到的关于 connectionManagement 中的 maxconnection 设置的文章:即 http://support.microsoft.com/kb/821268
我现在正在使用asp.net mvc,想知道使用内置的Json或 Json.Net哪个是更好的选择,但我不确定一个人是否比另一个人有优势。 另外,如果我确实选择沿用Json.Net的路线,那么我应该选
在 Visual Studio 中,您至少可以创建三种不同类型的类库: 类库(.NET Framework) 类库(.NET 标准) 类库(.NET Core) 虽然第一个是我们多年来一直使用的,但我
.NET 和 ASP.NET 之间有什么区别?它们有什么关系? 最佳答案 ASP.Net 基于 .Net 框架构建,提供有关 Web 开发的附加功能。 你可以去看看wikipedia article
在安装更高版本(3.0)之前,我需要安装.net框架1.1和2.0吗?或者单独安装 3.0 框架就足够了,并为在早期框架版本上编写的软件提供支持?谢谢 ,丽然 最佳答案 不,您不必安装以前的框架。 我
我正在开发一个项目,人们可以“更新”类别,例如更改类别的名称。我收到以下消息 This is called after clicking update 按钮 with the SQL statemen
.NET 类 System.Net.CookieContainer 线程安全吗? --更新:交 key 答复-- 是否有任何方法可以确保异步请求期间修改的变量(即 HttpWebRequest.Coo
我正在使用 JScript.NET 在我编写的 C# WinForms 应用程序中编写脚本。它工作得很好,但我只是尝试在脚本中放置一些异常处理,但我无法弄清楚如何判断我的 C# 代码抛出了哪种类型的异
我需要你的帮助, 比如我有一个小数类型的变量,我想这样取整。 例如 3.0 = 3 3.1 = 4 3.2 = 4 3.3 = 4 3.4 = 4 3.5 = 4 3.6 = 4 3.7 = 4 3.
我使用过这样的代码:http://msdn.microsoft.com/en-us/library/dw70f090.aspx在 ASP.NET 中工作之前访问数据库(2-3 年前)。我没有意识到我正
自 ConfigurationManager .NET Standard 中不存在,检索正在执行的程序集的应用程序设置的最佳方法是什么,无论是 web.config或 appSettings.{env
我是一名优秀的程序员,十分优秀!