濮阳杆衣贸易有限公司

主頁 > 知識庫 > 厚積薄發(fā),擁抱.NET 2016

厚積薄發(fā),擁抱.NET 2016

熱門標(biāo)簽:聯(lián)通官網(wǎng)400電話辦理 臨沂智能電話機(jī)器人加盟 400電話辦理怎么樣 外呼電話機(jī)器人成本 百應(yīng)電話機(jī)器人外呼系統(tǒng) 地圖標(biāo)注軟件免費(fèi)下載 西寧呼叫中心外呼系統(tǒng)線路商 蘇州如何辦理400電話 網(wǎng)絡(luò)電話外呼系統(tǒng)上海

初識 .NET 2016

.NET 2016 概覽

.NET 2016 作為 .NET 技術(shù)最新發(fā)展,如下圖所示,它主要包含三大塊

最左邊代表的是 .NET Framework 4.6,WPF、ASP.NET 4.x、ASP.NET Core 1.0 能運(yùn)行在它上。中間這部分代表的是 .NET Core 技術(shù),ASP.NET Core 1.0 和 Universal Windows Platform(UWP)能運(yùn)行在它之上。當(dāng)然,你也可以創(chuàng)建控制臺應(yīng)用程序運(yùn)行在.NET Core 上。最右邊是 Xamarin,它是一個基于 Mono 的跨平臺移動開發(fā)框架。

在.NET 2015 時,微軟為我們帶來了全新的 .NET,它就是.NET Core。.NET Core 的一個重要組成部分是新的運(yùn)行時(Runtime):CoreCLR。除了使用 CoreCLR 運(yùn)行時外,.NET 也能被編譯成 Native Code。UWP 自動使用這個特性,應(yīng)用程序在提交到 Windows Store 后被編譯成 Native Code,最終生成優(yōu)化過后的代碼,可以讓 APP 啟動時間加快并可以減少內(nèi)存消耗 。你當(dāng)然也能編譯其他.NET Core 應(yīng)用程序成 Native Code,并在Linux運(yùn)行。

在上圖的底部,你可以看到有一些東西在.NET Framework 4.6、.NET Core、Xamarin 之間共享。比如一些共享的Libraries,通過 Nuget 包的概念將這些 Libraries 匯集在 Package 中供所有的.NET 平臺使用。還有一些運(yùn)行時組件(Runtime Components)被共享,如 GC 和 RyuJIT,這是一個新的JIT編譯器,這個新的 JIT 編譯器不僅比以前更快,在調(diào)試時它還具有更好的支持編輯和繼續(xù)功能。這個功能可以在調(diào)試時編輯代碼并繼續(xù)調(diào)試,而不需要停止和重新啟動進(jìn)程。CLR、CoreCLR、.NET Native 使用 GC 進(jìn)行實(shí)例的銷毀以及內(nèi)存的回收,并且 CLR 和 CoreCLR 使用 RyuJIT 編譯器將 IL 代碼編譯成 Native Code 。當(dāng)然,新的編譯器 Roslyn 也是共享的。

.NET Framework 4.6

.NET Framework 4.6 作為 .NET Framework 的最新版本,在過去 10 多年間,不斷被增強(qiáng)。我們利用這個 Framework 構(gòu)建 Windows Form 、WPF、ASP.NET 4 等應(yīng)用程序。盡管 ASP.NET Core 應(yīng)用程序運(yùn)行在.NET Core 上,但它也能運(yùn)行在.NET Framework 4.6 上。

如果你想要繼續(xù)使用 ASP.NET Web Form 開發(fā)應(yīng)用程序,.那么 NET Framework 4.6 中的 ASP.NET 4.6 是你的最佳選擇。值得注意的是你不能在.NET Core 上運(yùn)行 ASP.NET Web Form 應(yīng)用程序。

.NET Core 1.0

.NET Core 1.0(目前是 RC2),是新的.NET,相比于 Mono,它是真正意義上跨平臺的實(shí)現(xiàn)。.NET Core 被設(shè)計成模塊化的方法,即被分割成大量的 Nuget Package。在應(yīng)用程序中,你決定需要哪些 Package,并且隨時保持更新和卸載。而.NET Framework,它是操作系統(tǒng)的一部分,注定不能實(shí)時被更新,同時,過去 10 多年件,.NET Framework 加入非常多的新功能,它變得越來越大,更糟糕的是,它不可能移除不再需要的舊功能。比如舊的集合類不再被使用因?yàn)榉盒图项惣尤?.NET Remoting 被新的通信技術(shù) WCF、ASP.NET Web API 替換,LINQ to Sql 被 EntityFramework 替換。而這些舊技術(shù),一直存在.NET Framework 中,你不得不全盤接受他們。

Xamarin

Mono 是開源社區(qū)開發(fā)的跨平臺.NET Framework,而 Xamarin 是一個構(gòu)建于 Mono 上跨平臺移動應(yīng)用開發(fā)框架。相信微軟收購了 Xamarin 之后,Mono 將得到大力支持,.NET Core 在移動端的表現(xiàn)拭目以待。

使用 .NET Framework 4.6 編譯應(yīng)用程序

創(chuàng)建 “Hello World” 應(yīng)用程序是學(xué)習(xí)一門新技術(shù)的開篇。在這兒,為了更好的去理解.NET Core,我們不打算去使用Visual Studio 2015 進(jìn)行開發(fā)。

Developer Command Prompt 編譯代碼

當(dāng)安裝完畢 Visual Studio 后,我們可以通過配套工具 Developer Command Prompt 使用 C# 編譯器編譯代碼。

1.打開記事本,使用 C# 編寫如下代碼,命名為 HelloWorldApp.cs 并保存至 C:\Code 文件夾

復(fù)制代碼 代碼如下:
class Program { static void Main() { System.Console.WriteLine("Hello World");}}

2.啟動 Developer Command Prompt for VS2015,鍵入如下命令:

進(jìn)入 C:\Code 文件夾 cd C:\Code使用 C# 編譯器編譯源代碼 csc HelloWorldApp.cs查看文件目錄結(jié)構(gòu) dir輸入EXE 名來運(yùn)行應(yīng)用程序 HelloWorldApp

運(yùn)行結(jié)果如下所示:

注意你的源代碼文件 HelloWorldApp.cs,已經(jīng)編譯到程序集HelloWorldApp.exe 中。當(dāng)你輸入 HelloWorldApp 名來運(yùn)行應(yīng)用程序,最終被.NET Framework 4.6 和它的 CLR 加載并運(yùn)行。

使用 ILDASM 反編譯程序集

1.C# 編譯器將源代碼轉(zhuǎn)換成IL代碼后存儲到程序集中(DLL 或者 EXE)。

2.IL 代碼語句就像匯編語言指令,它們被.NET 的虛擬機(jī)也就是 CLR執(zhí)行。在運(yùn)行時,CLR 從程序集中加載 IL 代碼,然后 JIT 編譯器編譯成 Native Code,最后交由 CPU執(zhí)行。

在 Developer Command Prompt 輸入 ildasm HelloWorldApp.exe,你會看到ILDASM 工具加載編譯過后的程序集:

雙擊 MANIFEST 節(jié)點(diǎn),查看元數(shù)據(jù):

可以看到.NET Metadata 的版本是 4.0.30319,并且依賴外部的程序集mscorlib,它的版本是4.0.0.0,上述截圖告訴我們,要運(yùn)行這個應(yīng)用程序需要安裝.NET Framework 4.0以上。

關(guān)閉 MANIFEST 窗口,再展開 Program 節(jié)點(diǎn),雙擊 Main 方法:

注意IL 指令:ldstr(load string ),nop(no operation ),call,ret(return)。記住IL 最終被 CLR 執(zhí)行。

使用 .NET Core CLI 編譯應(yīng)用程序

要使用最新的.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 創(chuàng)建.NET Core 應(yīng)用程序

你需要通過 Developer Command Prompt 使用如下命令:

1.再次進(jìn)入 C:\Code 文件夾 cd c:\code
2.創(chuàng)建新文件夾 mkdir SecondApp
3.進(jìn)入新文件夾 cd SecondApp
4.使用 CLI 創(chuàng)建.NET Core應(yīng)用程序 dotnet new
5.查看目錄結(jié)構(gòu) dir

dotnet new 命令創(chuàng)建了一個新的.NET Core 應(yīng)用程序,包含兩個文件,分別是 Program.cs 和 project.json。

Program.cs 是個簡單的控制臺應(yīng)用程序,輸出“Hello World”

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

而另一個文件:project.json,它是項目配置文件,并以JSON的格式定義了應(yīng)用程序的基本信息,比如: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 方法作為應(yīng)用程序的入口(Entry Point),所以需要將 buildOptions 節(jié)點(diǎn)下的emitEntryPoint 屬性設(shè)置為 true。

dependencies 節(jié)點(diǎn)代表應(yīng)用依賴的 packages,默認(rèn)情況下只添加了 Microsoft.NETCore.App 的依賴。值得注意的是,Microsoft.NETCore.App 是一個引用類型的Nuget Package,它又引用了其他的Nuget Package。這樣的好處是避免添加大量的其他package。

frameworks 節(jié)點(diǎn)列出了應(yīng)用程序支持的 frameworks。默認(rèn)情況下,應(yīng)用程序只支持.NET Core 1.0,以別名 netcoreapp1.0 表示。netcoreapp1.0 下的 imports 節(jié)點(diǎn) 引用舊名稱 dnxcore50。這允許我們?nèi)耘f可以使用舊名稱的 package。

接著,通過dotnet restore 下載所需要的依賴項

通過 project.lock.json,查看具體下載的 package 版本。

為了編譯應(yīng)用程序,使用命令 dotnet build。

最后,使用 dotnet run 運(yùn)行應(yīng)用程序。

值得注意的是,在 framework 中也可以添加應(yīng)用程序?qū)ζ渌?frameworks 的支持,添加字符串net46,表示當(dāng)前的控制臺應(yīng)用程序構(gòu)建于.NET Framework 4.6之上:

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

遺憾的是,dotnet build 之后,發(fā)生了異常。如下所示(注:當(dāng)前版本是.NET Core RC 2),

可以看到異常信息是 System.Runtime.Loader 不支持.NET Framework 4.6。只是一個很籠統(tǒng)的信息,個人猜測 Runtime Loader 只支持 CoreCLR 的加載,在 Github(https://github.com/dotnet/corefx/issues/8453) 中,也應(yīng)證了我的觀點(diǎn)。暫時的解決方法是將dependencies 節(jié)點(diǎn) 移入到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(見上一小節(jié))工具,打開文件夾可以看到他們之間一個很重要的區(qū)別,使用.NET Framework 的應(yīng)用程序編譯之后為生成包含 IL 的 EXE 應(yīng)用程序并且依賴mscorlib程序集 ,而使用.NET Core 的應(yīng)用程序編譯之后生成包含 IL 的DLL,依賴System.Console 和 System.Runtime 程序集。

最后,通過 dotnet run --framework net46 指定 famework 的版本為.NET Framework 4.6 查看運(yùn)行結(jié)果。

除了 dotnet build 和 dotnet run 外,你還可以通過 CLI 打包(dotnet pack)和 發(fā)布(dotnet publish)應(yīng)用程序。

dotnet pack 創(chuàng)建了一個 NuGet Package:

它是一個后綴名為 nupkg 的 Nuget Package,你可以將它改為.zip,解壓查看里面的內(nèi)容。

dotnet publish 發(fā)布一個可用于部署.NET 項目,你可以在 project.json 添加 runtime :

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

然后使用 dotnet restore 下載指定的 runtimes。當(dāng)跨平臺發(fā)布時,通過參數(shù) -r 指定 runtime,比如 dotnet publish -r ubuntu.14.04-x64,最后將發(fā)布之后的文件夾(ubuntu.14.04-x64/publish)拷貝到指定 OS 就可以執(zhí)行,無需安裝 .NET Core 和 .NET Core SDK,只需安裝.NET Core 依賴的 Libraries 即可。

小結(jié)

告別.NET 開發(fā)一年多,沒想到發(fā)生了這么多不可思議的技術(shù),抓緊時間補(bǔ)充一下。我招過人,也求過職,深切體會到國內(nèi).NET 的生態(tài)環(huán)境不給力,希望.NET Core 的出現(xiàn)能為我們指向一條明路,就像森林里一縷陽光,帶來希望。

本文為木宛城主原創(chuàng)。
原文地址:http://www.cnblogs.com/OceanEyes/p/dotnet_2016_overview.html

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • asp.net漢字轉(zhuǎn)拼音和獲取漢字首字母的代碼
  • asp.net gridview 72般絕技
  • asp.net“服務(wù)器應(yīng)用程序不可用” 解決方法
  • asp.net UpdatePanel的簡單用法
  • asp.net 面試 筆試題目[附答案]
  • asp.net(c#)網(wǎng)頁跳轉(zhuǎn)七種方法小結(jié)
  • .NET 資源文件resx、Resources詳細(xì)說明
  • ASP.NET對路徑"xxxxx"的訪問被拒絕的解決方法小結(jié)
  • ASP.NET中的幾種彈出框提示基本實(shí)現(xiàn)方法
  • .NET Web開發(fā)之.NET MVC框架介紹

標(biāo)簽:聊城 慶陽 清遠(yuǎn) 甘肅 中衛(wèi) 臨夏 海西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《厚積薄發(fā),擁抱.NET 2016》,本文關(guān)鍵詞  厚積薄發(fā),擁抱,.NET,2016,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《厚積薄發(fā),擁抱.NET 2016》相關(guān)的同類信息!
  • 本頁收集關(guān)于厚積薄發(fā),擁抱.NET 2016的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    抚州市| 青田县| 连平县| 塘沽区| 五河县| 上饶市| 宁武县| 茌平县| 正阳县| 大名县| 武山县| 河西区| 沅江市| 晋城| 筠连县| 库伦旗| 夏邑县| 拉孜县| 哈巴河县| 海盐县| 福州市| 金溪县| 兴文县| 青海省| 北辰区| 泰安市| 双牌县| 神农架林区| 钦州市| 常宁市| 华容县| 茌平县| 呼伦贝尔市| 广灵县| 平凉市| 郴州市| 康保县| 炉霍县| 台南县| 安国市| 商都县|