.Net Core入门简介

.net跨平台前世今生

.NET Core And .NET Framework

.NET core 1.0并不是对原有的.net平台的升级,而是一次全新的重写,这个开发过程微软也史无前例的采用了全面开源的做法,在github上接受全球开发者的pull request。从上图可以看出,.NET core与现有的.net framework是并行的,是完全独立发展的一套开发平台。与之前的.net framework最大的区别在于跨平台,同时支持Windows/macOS/Linux 这三大操作系统。在GitHub上.NET Core的发布时间线可以看到在过去的2年里,微软一步步的将.NET 从Windows操作系统上剥离,逐步添加了对macOS和Linux操作系统的支持,同时与开源社区的合作也在逐步加深。

  1. 2014年7月 - 微软在github上发布了asp.net vNext(也就是asp.net 5)的前身,这时还是alpha阶段
  2. 2014年11月 - 发布了beta1,并且开始使用asp.net 5的名称
  3. 2015年10月 - 发布了beta8,这是最后的一个beta版本,这一年的时间里,微软逐步提供了对于macOS和Linux操作系统的支持;同时随着 Visual Studio Code 这个跨平台代码编辑器的流行,大家慢慢开始关注asp.net 5
  4. 2015年11月 - 发布了RC1,标志着asp.net 5基本具备了使用在生产环境的能力
  5. 2016年6月27日 - 在RedHat全栈开发者大会DevNation上,微软与RedHat携手发布了Asp.net Core 1.0,标志着微软这一跨平台开发工具的正式发布

.net core

.net core 是一个通用的,模块化的,跨平台并且开源的 .NET标准的实现。它包含来一个运行时,基础框架类库,编译器和一些工具以支持不同的CPU和操作系统。

项目的GitHub地址:

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

发布计划

  1. 2016.6 发布1.0
  2. 2016秋季 发布1.1

1.1计划

  1. 广泛的API支持,让.NET Framewok和Mono在BCL级别上等价。
  2. 过渡把MSBuild和的csproj作为.NET的所有版本的默认生成系统和项目模型。

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的正式规范,目的是为.NET 生态系统建立更大的统一性。
  • .NET Standard Library实现了以下主要方案:
1. 定义了统一的BCL APIS(标准类库接口),所有的.NET平台去实现它,独立的工作量
2. 允许开发人员编写可移植类库,使用相同的API运行在跨.NET 运行时上。
3. 减少和消除那些希望共享源代码的但是需要加入编译预处理命令做条件编译的的.NET API和那些仅适用于OS的API。

各种.NET运行时实现了.NET标准库的特定版本。每个.NET运行时版本发布,它支持最高.NET标准版,这意味着它也支持以前的版本的声明。(向下兼容)

例如:
.NET Framework 4.6 实现.NET Standard Library 1.3,那么意味着 它支持.NET Standard Library versions 1.0 through 1.3.又比如.NET Framework 4.6.2 实现 .NET Standard Library 1.5,while .NET Core 1.0 实现了 .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文档
更多相关说明

环境搭建

windows

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

ps:如果已经安装了 vs2015 update3 在安装.NET Core 1.0.0 - VS 2015 Tooling Preview 2时还是提示没有安装update3,
可以使用“SKIP_VSU_CHECK=1”这个参数忽略vs的检查。
在命令行使用: DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 进行安装。

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

Linux

可以通过下载源码编译安装,也可以通过包管理器安装,具体参考
官网教程

Mac

  1. 安装Homebrew
  2. 安装一些依赖环境
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中。

装好环境后用运行命令 dotnet 进行检验

dotnet命令介绍

  1. dotnet new 初始化一个 .NET项目
  2. dotnet restore 使用NuGet还原在项目文件project.json 中定义的依赖关系和项目特定的工具。
    注:运行 dotnet 还原生成一个锁文件 project.json.lock,其中包括有关所有被恢复的软件包的详细的信息。
  3. dotnet build 生成.NET项目
build命令会把项目和他所依赖的项目编译成一个二进制文件,默认情况下二进制文件是IL 和.dll 为文件扩展名。编译过程依赖于已经存在锁文件project.json.lock,这是restore命令生成的。
为了生成一个可执行的应用程序,您需要确保该项目配置的编译选项设置应用的入口点︰
 "buildOptions": {
    "emitEntryPoint": true
  }
  1. dotnet run 编译执行一个.NET项目
  2. dotnet pack 创建一个nuget包
pack命令编译项目并生成NuGet包,该操作会生成两个NuGet程序包:
一个包括已编译代码的程序集文件
一个包括调试符号和已编译代码的程序集文件
项目依赖的NuGet项目添加到生成nuspec文件中,默认情况不打包项目之间的引用关系,但可以通过更改项目的相关性类型。
  1. dotnet test 用Test运行工具运行项目中指定的单元测试
  2. dotnet publish 发布.NET项目(包括运行时)
发布命令会编译应用程序并读取项目文件,
然后将结果集的文件发布到一个目录。生成目录的内容将取决于项目的类型,但可以包括一个跨平台的 IL 应用程序和他依赖项,
这就是通常用的Portable部署方式,
应用程序共享.NET Core运行时环境与程序集依赖,
部署的目标机器上需要事先安装.NET Core SDK,
然后用dotnet命令运行程序。或者是每个本机平台的子文件夹或自包含的应用程序,
其中包括目标平台的运行时,这就是Self-contained部署方式。
Self-contained部署方式就是每个应用程序自带.NET Core运行时环境与程序集依赖,
部署的目标机器不需要安装.NET Core SDK,将应用程序文件夹拷贝过来就能运行。
默认的project.json编译出来的应用没有包括跨平台,需要修改project.json文件,需要在 project.json 加入 runtimes 节点 注释掉 "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 环境搭建和命令行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.

根据最新的消息,.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命令 创建一个.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!

项目结构如下所示:

├── 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命令 创建一个.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 打开项目
    当我们第一次打开的时候,会出现缺少debug文件,点击yes即可。


    缺少配置文件提示

    此时会会生成一个隐藏的文件夹,里面有两个配置文件。


    配置文件
  2. 修改HomeController里的Index方法,然后断点调试。
    提示分两种,一种是直接启动web调试,另外一种是附加进程调试,跟visual studio里面的类似。


    调试模式
断点调试和监控变量

用Project Rider创建一个netcore项目

  1. 去JetBrains官网填写一些个人信息,然后订阅一下,就会收到一份邮件,里面有相关下载的链接,下载好之后进行安装。
  2. 创建项目


    软件的首页
  3. 创建一个.net core 项目


    2.png
创建好以后的界面
  1. 在Main方法里输出Hello World,并且编译运行。
编译

但是会报错,
Unable to perform Build: Select toolset to perform build

但是我们通过命令去运行的话,是可以正常编译的。

这是因为目前Rider不能基于global.json和project.json识别项目。
我们需要MSBuild或者XBuild来编译项目。
注:因为微软弃用global.json和project.json,所以这个计划应该不会再继续执行。

最简单的解决方案,就是下载mono,安装包里自带里MSBuild,不怕麻烦的话也可以去github下载编译。

执行效果图
项目结构图

用visual studio 2015 创建一个简单的.netcore项目

这个难度最低,和平时操作无多大区别。

引用

.netcore开源
.net core 英文文档
Project Rider EAP 入门指南

ASP.NET Core

asp.net core 英文文档
asp.net core 中文文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容