.Net Core入門簡介

.net跨平臺前世今生

.NET Core And .NET Framework

.NET core 1.0并不是對原有的.net平臺的升級感昼,而是一次全新的重寫,這個開發(fā)過程微軟也史無前例的采用了全面開源的做法系忙,在github上接受全球開發(fā)者的pull request映跟。從上圖可以看出,.NET core與現(xiàn)有的.net framework是并行的拗小,是完全獨立發(fā)展的一套開發(fā)平臺重罪。與之前的.net framework最大的區(qū)別在于跨平臺,同時支持Windows/macOS/Linux 這三大操作系統(tǒng)哀九。在GitHub上.NET Core的發(fā)布時間線可以看到在過去的2年里剿配,微軟一步步的將.NET 從Windows操作系統(tǒng)上剝離,逐步添加了對macOS和Linux操作系統(tǒng)的支持阅束,同時與開源社區(qū)的合作也在逐步加深惨篱。

  1. 2014年7月 - 微軟在github上發(fā)布了asp.net vNext(也就是asp.net 5)的前身,這時還是alpha階段
  2. 2014年11月 - 發(fā)布了beta1围俘,并且開始使用asp.net 5的名稱
  3. 2015年10月 - 發(fā)布了beta8砸讳,這是最后的一個beta版本层玲,這一年的時間里播玖,微軟逐步提供了對于macOS和Linux操作系統(tǒng)的支持;同時隨著 Visual Studio Code 這個跨平臺代碼編輯器的流行,大家慢慢開始關注asp.net 5
  4. 2015年11月 - 發(fā)布了RC1而昨,標志著asp.net 5基本具備了使用在生產(chǎn)環(huán)境的能力
  5. 2016年6月27日 - 在RedHat全棧開發(fā)者大會DevNation上,微軟與RedHat攜手發(fā)布了Asp.net Core 1.0太示,標志著微軟這一跨平臺開發(fā)工具的正式發(fā)布

.net core

.net core 是一個通用的侥锦,模塊化的,跨平臺并且開源的 .NET標準的實現(xiàn)克胳。它包含來一個運行時平绩,基礎框架類庫,編譯器和一些工具以支持不同的CPU和操作系統(tǒng)漠另。

項目的GitHub地址:

  1. Base Class Libraries
  2. CoreCLR runtime and RyuJIT compiler
  3. Roslyn compiler
  4. CLI tools

發(fā)布計劃

  1. 2016.6 發(fā)布1.0
  2. 2016秋季 發(fā)布1.1

1.1計劃

  1. 廣泛的API支持捏雌,讓.NET Framewok和Mono在BCL級別上等價。
  2. 過渡把MSBuild和的csproj作為.NET的所有版本的默認生成系統(tǒng)和項目模型笆搓。

Version 1.0 OS Support:

OS Version Architectures Configurations
Windows Client 7 SP1 - 10 x64, x86
Windows Server 2008 R2 SP1 - 2016 x64, x86 Full, Server Core, Nano (2016 only)
Red Hat Enterprise Linux 7.2 x64
Fedora 23 x64
Debian 8.2 x64
Ubuntu 14.04 LTS, 16.04 LTS x64
Linux Mint 17 x64
openSUSE 13.2 x64
Centos 7.1 x64
Oracle Linux 7.1 x64
Mac OS X 10.11 (El Capitan) x64

.net standard

  • .NET Standard Library 是所有.NET運行時.NET API的正式規(guī)范性湿,目的是為.NET 生態(tài)系統(tǒng)建立更大的統(tǒng)一性。
  • .NET Standard Library實現(xiàn)了以下主要方案:
1. 定義了統(tǒng)一的BCL APIS(標準類庫接口)满败,所有的.NET平臺去實現(xiàn)它肤频,獨立的工作量
2. 允許開發(fā)人員編寫可移植類庫,使用相同的API運行在跨.NET 運行時上算墨。
3. 減少和消除那些希望共享源代碼的但是需要加入編譯預處理命令做條件編譯的的.NET API和那些僅適用于OS的API宵荒。

各種.NET運行時實現(xiàn)了.NET標準庫的特定版本。每個.NET運行時版本發(fā)布净嘀,它支持最高.NET標準版报咳,這意味著它也支持以前的版本的聲明。(向下兼容)

例如:
.NET Framework 4.6 實現(xiàn).NET Standard Library 1.3面粮,那么意味著 它支持.NET Standard Library versions 1.0 through 1.3.又比如.NET Framework 4.6.2 實現(xiàn) .NET Standard Library 1.5,while .NET Core 1.0 實現(xiàn)了 .NET Standard Library 1.6.

.NET Standard關系圖
Target Platform Name Alias
.NET Platform Standard netstandard 1.0 1.1 1.2 1.3 1.4 1.5 1.6
.NET Core netcoreapp 1.0
.NET Framework net 4.6.3
4.6.2
4.6.1
4.6
4.5.2
4.5.1
4.5
Universal Windows Platform uap 10.0
Windows win 8.1
8.0
Windows Phone wpa 8.1
Windows Phone Silverlight wp 8.1
8.0
Mono/Xamarin Platforms *
Mono *

NuGet

.NET Platform Standard version mapping
.NET Platform Standard version NuGet identifier
1.0 - 1.6 netstandard1.0 - netstandard1.6
Specific platform mapping
Platform NuGet identifier
.NET Framework 2.0 - 4.6 net20 - net46
.NET Core netcoreapp
.NET Micro Framework netmf
Windows 8 win8, netcore45
Windows 8.1 win8, netcore451
Windows Phone Silverlight (8, 8.1) wp8, wp81
Windows Phone 8.1 wpa8.1
Universal Windows Platform 10 uap10.0, netcore50
Silverlight 4, 5 sl4, sl5
MonoAndroid monoandroid
MonoTouch monotouch
MonoMac monomac
Xamarin iOS xamarinios
Xamarin PlayStation 3 xamarinpsthree
Xamarin PlayStation 4 xamarinpsfour
Xamarin PlayStation Vita xamarinpsvita
Xamarin Watch OS xamarinwatchos
Xamarin TV OS xamarintvos
Xamarin Xbox 360 xamarinxboxthreesixty
Xamarin Xbox One xamarinxboxone
棄用的包名
Platform Deprecated NuGet identifier Current NuGet identifier
ASP.NET 5.0 on .NET Framework aspnet50 net46
ASP.NET 5.0 on .NET Core aspnetcore50 netcoreapp1.0
DNX on .NET Framework 4.5.1 - 4.6 dnx451 - dnx46 net451 - net46
DNX on .NET Core 5.0 dnxcore50 netcoreapp1.0
.NET Standard Application 1.5 netstandardapp1.5 netcoreapp1.0
.NET Platform 5.1 - 5.6 dotnet5.1 - dotnet5.6 netstandard1.0 - netstandard1.5
.NET Platform 5.0 dotnet netstandard1.3
Windows 8 winrt win8 or netcore45

.NET Standard Library文檔
更多相關說明

環(huán)境搭建

windows

最好的方式:
  1. Visual Studio 2015 Update 3
  2. .NET Core 1.0.0 - VS 2015 Tooling Preview 2

ps:如果已經(jīng)安裝了 vs2015 update3 在安裝.NET Core 1.0.0 - VS 2015 Tooling Preview 2時還是提示沒有安裝update3少孝,
可以使用“SKIP_VSU_CHECK=1”這個參數(shù)忽略vs的檢查。
在命令行使用: DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 進行安裝熬苍。

其他方式
  1. .NET Core SDK for Windows
  2. Visual Studio Code

Linux

可以通過下載源碼編譯安裝稍走,也可以通過包管理器安裝,具體參考
官網(wǎng)教程

Mac

  1. 安裝Homebrew
  2. 安裝一些依賴環(huán)境
brew update
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
  1. 安裝.Net Core SDK
    最好的方式就是下載pkg的包進行安裝
    .Net Core SDK
    安裝好之后會將工具的路徑加入到PATH中柴底。

裝好環(huán)境后用運行命令 dotnet 進行檢驗

dotnet命令介紹

  1. dotnet new 初始化一個 .NET項目
  2. dotnet restore 使用NuGet還原在項目文件project.json 中定義的依賴關系和項目特定的工具婿脸。
    注:運行 dotnet 還原生成一個鎖文件 project.json.lock,其中包括有關所有被恢復的軟件包的詳細的信息柄驻。
  3. dotnet build 生成.NET項目
build命令會把項目和他所依賴的項目編譯成一個二進制文件狐树,默認情況下二進制文件是IL 和.dll 為文件擴展名。編譯過程依賴于已經(jīng)存在鎖文件project.json.lock鸿脓,這是restore命令生成的抑钟。
為了生成一個可執(zhí)行的應用程序涯曲,您需要確保該項目配置的編譯選項設置應用的入口點︰
 "buildOptions": {
    "emitEntryPoint": true
  }
  1. dotnet run 編譯執(zhí)行一個.NET項目
  2. dotnet pack 創(chuàng)建一個nuget包
pack命令編譯項目并生成NuGet包,該操作會生成兩個NuGet程序包:
一個包括已編譯代碼的程序集文件
一個包括調(diào)試符號和已編譯代碼的程序集文件
項目依賴的NuGet項目添加到生成nuspec文件中在塔,默認情況不打包項目之間的引用關系幻件,但可以通過更改項目的相關性類型。
  1. dotnet test 用Test運行工具運行項目中指定的單元測試
  2. dotnet publish 發(fā)布.NET項目(包括運行時)
發(fā)布命令會編譯應用程序并讀取項目文件蛔溃,
然后將結(jié)果集的文件發(fā)布到一個目錄绰沥。生成目錄的內(nèi)容將取決于項目的類型,但可以包括一個跨平臺的 IL 應用程序和他依賴項贺待,
這就是通常用的Portable部署方式徽曲,
應用程序共享.NET Core運行時環(huán)境與程序集依賴,
部署的目標機器上需要事先安裝.NET Core SDK麸塞,
然后用dotnet命令運行程序秃臣。或者是每個本機平臺的子文件夾或自包含的應用程序喘垂,
其中包括目標平臺的運行時甜刻,這就是Self-contained部署方式绍撞。
Self-contained部署方式就是每個應用程序自帶.NET Core運行時環(huán)境與程序集依賴正勒,
部署的目標機器不需要安裝.NET Core SDK,將應用程序文件夾拷貝過來就能運行傻铣。
默認的project.json編譯出來的應用沒有包括跨平臺章贞,需要修改project.json文件,需要在 project.json 加入 runtimes 節(jié)點 注釋掉 "type": "platform"非洲。
{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {"hwapp":"1.0.0"},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
     }
    },

   "runtimes":{
      "win7-x64": { },
      "win7-x86": { },
      "osx.10.10-x64": { },
      "osx.10.11-x64": { },
      "ubuntu.14.04-x64":{ },
      "centos.7-x64":{}
   }

}

具體參考文檔參考文檔
.NET Core Application Deployment
project.json文檔
Global.json文檔

具體的用法可以通過
dotnet [new|restore|build|run|pack|publish|test] -h 獲取

參考 .NET Core系列 : 1鸭限、.NET Core 環(huán)境搭建和命令行CLI入門

IDE推薦

  1. Visual Studio 2015
  2. Visual Studio Code
  3. Project Rider(JetBrains)
Project Rider簡介

Project Rider項目呢是一個新的C#的IDE,它基于IntelliJ和Resharper两踏。
目前的話它打開和識別項目依賴于.sln 和 .xproj 和.csproj文件败京。但是.net core項目使用global.json和project.json文件來描述解決方案和項目。以后的話對于.net core的程序梦染,依賴于global.json和project.json文件識別項目赡麦。

DNX projects use a global.json and project.json files to describe a solution and projects. Rider cannot yet open DNX projects based on these files, and requires a .sln file and all projects to also have a .xproj file. These can be generated by opening the solution in Visual Studio. Rider itself does not use these MSBuild files, but talks directly to the DNX Design Time Host. Future builds will open DNX projects based on global.json and project.json.

根據(jù)最新的消息,.net core 項目組要取消project.json和global.json帕识,重新使用MSBuild和.csproj

News: Project.json for ASP.NET Core is going away
Farewell project.json - hello MSBuild and .csproj (.NET Core)

用dotnet命令 創(chuàng)建一個.netcore控制臺項目

mkdir dotnetcoreapp
cd dotnetcoreapp
dotnet new 
dotnet restore
dotnet run

Project dotnetcoreapp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling dotnetcoreapp for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.4853106
 

Hello World!

項目結(jié)構(gòu)如下所示:

├── Program.cs
├── bin
│   └── Debug
│       └── netcoreapp1.0
│           ├── dotnetcoreapp.deps.json
│           ├── dotnetcoreapp.dll
│           ├── dotnetcoreapp.pdb
│           ├── dotnetcoreapp.runtimeconfig.dev.json
│           └── dotnetcoreapp.runtimeconfig.json
├── obj
│   └── Debug
│       └── netcoreapp1.0
│           ├── dotnet-compile-csc.rsp
│           ├── dotnet-compile.assemblyinfo.cs
│           └── dotnet-compile.rsp
├── project.json
└── project.lock.json

用dotnet命令 創(chuàng)建一個.netcore Web項目泛粹,再用vs code進行debug

mkdir dotnetcoreapp
cd dotnetcoreapp
dotnet new -t Web
dotnet restore
dotnet run

Project dotnetcoreapp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling dotnetcoreapp for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:03.9491092
 

info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
      User profile is available. Using '/Users/cjt908/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /Users/cjt908/Desktop/dotnetcoreapp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
運行圖
  1. 用vs code 打開項目
    當我們第一次打開的時候,會出現(xiàn)缺少debug文件肮疗,點擊yes即可晶姊。


    缺少配置文件提示

    此時會會生成一個隱藏的文件夾,里面有兩個配置文件伪货。


    配置文件
  2. 修改HomeController里的Index方法们衙,然后斷點調(diào)試钾怔。
    提示分兩種,一種是直接啟動web調(diào)試蒙挑,另外一種是附加進程調(diào)試蒂教,跟visual studio里面的類似。


    調(diào)試模式
斷點調(diào)試和監(jiān)控變量

用Project Rider創(chuàng)建一個netcore項目

  1. 去JetBrains官網(wǎng)填寫一些個人信息脆荷,然后訂閱一下凝垛,就會收到一份郵件,里面有相關下載的鏈接蜓谋,下載好之后進行安裝梦皮。
  2. 創(chuàng)建項目


    軟件的首頁
  3. 創(chuàng)建一個.net core 項目


    2.png
創(chuàng)建好以后的界面
  1. 在Main方法里輸出Hello World,并且編譯運行桃焕。
編譯

但是會報錯剑肯,
Unable to perform Build: Select toolset to perform build

但是我們通過命令去運行的話,是可以正常編譯的观堂。

這是因為目前Rider不能基于global.json和project.json識別項目让网。
我們需要MSBuild或者XBuild來編譯項目。
注:因為微軟棄用global.json和project.json师痕,所以這個計劃應該不會再繼續(xù)執(zhí)行溃睹。

最簡單的解決方案,就是下載mono胰坟,安裝包里自帶里MSBuild因篇,不怕麻煩的話也可以去github下載編譯。

執(zhí)行效果圖
項目結(jié)構(gòu)圖

用visual studio 2015 創(chuàng)建一個簡單的.netcore項目

這個難度最低笔横,和平時操作無多大區(qū)別竞滓。

引用

.netcore開源
.net core 英文文檔
Project Rider EAP 入門指南

ASP.NET Core

asp.net core 英文文檔
asp.net core 中文文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吹缔,隨后出現(xiàn)的幾起案子商佑,更是在濱河造成了極大的恐慌,老刑警劉巖厢塘,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茶没,死亡現(xiàn)場離奇詭異,居然都是意外死亡俗冻,警方通過查閱死者的電腦和手機礁叔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迄薄,“玉大人琅关,你說我怎么就攤上這事。” “怎么了涣易?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵画机,是天一觀的道長。 經(jīng)常有香客問我新症,道長步氏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任徒爹,我火速辦了婚禮荚醒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隆嗅。我一直安慰自己界阁,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布胖喳。 她就那樣靜靜地躺著泡躯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丽焊。 梳的紋絲不亂的頭發(fā)上较剃,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音技健,去河邊找鬼写穴。 笑死,一個胖子當著我的面吹牛凫乖,可吹牛的內(nèi)容都是我干的确垫。 我是一名探鬼主播弓颈,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼帽芽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翔冀?” 一聲冷哼從身側(cè)響起导街,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纤子,沒想到半個月后搬瑰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡控硼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年泽论,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卡乾。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡翼悴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幔妨,到底是詐尸還是另有隱情鹦赎,我是刑警寧澤谍椅,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站古话,受9級特大地震影響雏吭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陪踩,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一杖们、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肩狂,春花似錦胀莹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栅螟,卻和暖如春荆秦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背力图。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工步绸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吃媒。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓瓤介,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赘那。 傳聞我的和親對象是個殘疾皇子刑桑,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容