文章概要

.NET Core 快速学习、入门系列教程。这个入门系列教程主要跟大家聊聊.NET Core的前世今生,以及Windows、Linux(CentOS、Ubuntu)基础开发环境的搭建、第一个.NET Core App,以及开发工具的使用、调试技巧,调试快捷键整理等等。


.NET Core 2.0发布之后,实际上是实现了.NET Standard 2.0 约等于 .NET Framework 4.6.1 可以说,想用的API都有了。以后就可以放心的使用 ASP.NET Core on Linux,这可比跑在Mono上放心多了。从.NET平台迁移到.NET Core必将是趋势,所以学习.NET Core非常有必要。

开篇:说说.NET Core的那些事儿

一、.NET Core的诞生

聊 .NET Core,就不得不说他的爸爸 .NET。
当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按照JVM标准实现的,据说也是当时性能最好的Java虚拟机。但是微软也是有私心的,微软总想搞点Windows平台上的特性,有点想把Java绑定到Windows平台上的味道,另外Sun公司确实有点小心眼,于是Sun公司就跟微软闹掰了,然后微软就推出了 .NET,.NET从出生开始其实就借鉴了Java,然后又一步步在语言特性、窗体开发等方面实现了超越。Java在1.6版本以后发展缓慢,后面Java也在语言特性上借鉴了 .NET。当然,这也是由于Sun公司不太争气。https://www.zhihu.com/question/22814456
.NET虽然一直发展的不错,也有WPF、Unity3D这样具有竞争力框架的出现。
但是.NET平台在一些较大的项目,尤其是不受互联网公司的喜爱。就是因为.NET不是开源的框架,也不是可跨平台的框架,那就会带来以下问题:

  • 钱:选择.NET就要选择Visual Studio,Windows Server,license是不可忽视的成本
  • 生态:没有来自于社区的贡献,那.NET没有诞生优秀框架的土壤
  • 人才:无法吸引一线公司优秀互联网工程师加入,因为他们用Java、PHP等

纵使有Mono这么强大的框架,可以让 .NET 跑在Linux上,但是这还不够。
毕竟Mono只能发挥.NET部分有限的能力
另外,马上容器时代都要来了,跟Windows的强依赖,如何上Docker?
当然这这是ken能看到的一部分原因吧,总之,形式所迫,拥抱变化,.NET Core应运而生。

二、.NET core 与 .NET Framework的区别

.NET Core 就是 .NET Framework的区别的开源且跨平台版本
.NET Core 虽然是 .NET Framework的开源版本,但微软毕竟不能维护两个不同的分支
一个跑在Windows上,一个跑在Linux(Unix Like)系统上,所以微软抽象出来一个标准库
.NET Core 与 .NET Framework 都必须实现标准库的API ,就这样 .NET Core、.NET Framework、XAMARIN成了三兄弟,分别为不同的平台服务。
.NET Core 快速入门教程 - 图1
现在 .NET Core 2.0 Preview版本已经发布,.NET Core 2.0 基本等于 .NET Framework 4.6.1,从2016年6月 1.0发布到2017年6月 2.0发布,仅仅1年,达到这种程度,可见微软还是很给力的

三、学习 .NET Core需要做哪些准备?

我的第一个.NET Core App(Windows篇)

一、前言

  • 本篇开发环境?
    1、操作系统: Windows 10 X64
    2、SDK: .NET Core 2.0 Preview

    二、安装 .NET Core SDK

    1、下载 .NET Core

    下载地址:https://www.microsoft.com/net/download/core
    根据自己电脑情况选择对应版本即可
    .NET CORE 2.0下载地址:https://aka.ms/dotnet-sdk-2.0.0-preview2-win-x64

    2、安装 .NET Core

    微软出品,一键安装,只需一步,看图:
    .NET Core 快速入门教程 - 图2
    .NET Core 快速入门教程 - 图3

    三、熟悉命令(cmd)

    1、查看版本

    1. #使用命令提示符(cmd)或者Windows PowerShell
    2. dotnet --version

    2、可选参数介绍

    | 参数 | 介绍(en) | 介绍(ken的翻译) | | —- | —- | —- | | new | Initialize .NET projects. | 初始化项目(相当于通过VS模板新建项目) | | restore | Restore dependencies specified in the .NET project. | 还原项目中的依赖(相当于VS创建ASP.NET MVC,添加相关依赖) | | run | Compiles and immediately executes a .NET project. | 启动项目 | | build | Builds a .NET project. | 编译项目 | | publish | Publishes a .NET project for deployment (including the runtime). | 发布项目(包含runtime) | | test | Runs unit tests using the test runner specified in the project. | 启动单元测试 | | pack | Creates a NuGet package. | 创建nuget包 | | migrate | Migrates a project.json based project to a msbuild based project. | 迁移基于project.json,以兼容msbuild的编译 | | clean | Clean build output(s). | 清除项目中编译产生的输出 | | sln | Modify solution (SLN) files. | 修改解决方案文件.sln | | add | Add reference to the project. | 添加引用 | | remove | Remove reference from the project. | 移除引用 | | list | List reference in the project. | 列出项目中的引用 | | nuget | Provides additional NuGet commands. | 通过nuget参数并附加一些参数,可以进行nuget包管理的一些操作 | | msbuild | Runs Microsoft Build Engine (MSBuild). | 使用msbuild进行编译 | | vstest | Runs Microsoft Test Execution Command Line Tool. | 启动命令行测试工具 | | -v/—version | Display .NET Core SDK version. | 查看 .NET Core SDK版本 | | -i/—info | Display .NET Core information. | 查看 .NET Core 详细信息 | | -d/—diagnostics | Enable diagnostic output. | 启用诊断 | | -v/—verbosity | Set the verbosity level of the command. | 设置冗长命令集? | | -h/—help | Show help. | 查看帮助 |

四、HelloWorld项目

1、创建项目

  1. #使用命令提示符(cmd)或者Windows PowerShell
  2. #1、打开项目文件夹(如果没有就先创建好)
  3. d:
  4. cd d:\projects
  5. #2、创建项目
  6. dotnet new console -o helloworld
  7. #dotnet new :创建&初始化项目
  8. #console : 模板类型(相当于VS创建项目选择控制台应用程序)
  9. #-o :指定output路径名,可以理解为项目文件夹名称,默认项目名称=项目文件夹名称,也可以用-n 单独指定项目名称
  10. #dotnet new console -n helloworld 效果等同于 dotnet new console -o helloworld
  11. #执行输出:
  12. The template "Console Application" was created successfully.
  13. Processing post-creation actions...
  14. Running 'dotnet restore' on helloworld\helloworld.csproj...
  15. Restoring packages for D:\Projects\helloworld\helloworld.csproj...
  16. Installing Microsoft.NETCore.DotNetAppHost 2.0.0-preview2-25407-01.
  17. Installing Microsoft.Packaging.Tools 1.0.0-preview2-25401-01.
  18. Installing Microsoft.NETCore.DotNetHostResolver 2.0.0-preview2-25407-01.
  19. Installing NETStandard.Library 2.0.0-preview2-25401-01.
  20. Installing Microsoft.NETCore.Platforms 2.0.0-preview2-25405-01.
  21. Installing Microsoft.NETCore.DotNetHostPolicy 2.0.0-preview2-25407-01.
  22. Installing Microsoft.NETCore.App 2.0.0-preview2-25407-01.
  23. Generating MSBuild file D:\Projects\helloworld\obj\helloworld.csproj.nuget.g.props.
  24. Generating MSBuild file D:\Projects\helloworld\obj\helloworld.csproj.nuget.g.targets.
  25. Restore completed in 7.04 sec for D:\Projects\helloworld\helloworld.csproj.
  26. Restore succeeded.
  27. #项目文件就在d:\projects\hellworld中

2、输出结果分析

  1. #1、显示根据指定dotnet new console -o helloworld模板创建了项目
  2. The template "Console Application" was created successfully.
  3. #2、然后又主动调用了dotnet restore命令来还原项目的引用,主动安装依赖
  4. Processing post-creation actions...
  5. Running 'dotnet restore' on helloworld\helloworld.csproj...
  6. Restoring packages for D:\Projects\helloworld\helloworld.csproj...

3、运行

  1. cd d:\projects\helloworld
  2. dotnet run
  3. #运行结果
  4. Hello World!
  5. # 恭喜你,你的第一个.NET Core应用程序就这么诞生了
  6. #源代码请查 d:\projects\hellworld\Program.cs 文件

五、备注

.NET Core 2.0 项目模板

Templates Short Name Language Tags
Console Application console [C#], F#, VB Common/Console
Class library classlib [C#], F#, VB Common/Library
Unit Test Project mstest [C#], F#, VB Test/MSTest
xUnit Test Project xunit [C#], F#, VB Test/xUnit
ASP.NET Core Empty web [C#] Web/Empty
ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC
ASP.NET Core Web App (Razor Pages) razor [C#] Web/MVC/Razor Pages
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
ASP.NET Core Web API webapi [C#] Web/WebAPI
Nuget Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
Razor Page page Web/ASP.NET
MVC ViewImports viewimports Web/ASP.NET
MVC ViewStart viewstart Web/ASP.NET

不得不说:C#才是.NET平台的亲儿子啊

如何知道命令支持哪些参数?

答:利用好—help/-h 参数

  1. #示例:
  2. dotnet --help
  3. dotnet new --help
  4. dotnet restore --help
  5. dotnet new console --help
  6. dotnet new mvc --help

我的第一个.NET Core App (CentOS篇)

一、前言

  • 本篇开发环境

1、操作系统:CentOS7(因为ken比较偏爱CentOS7)
2、SDK版本:.NET Core 2.0 Preview

  • 你可能需要的前置知识

1、了解如何通过Hyper-V安装CentOS虚拟机
2、了解CentOS7基础命令/常用命令

二、安装 .NET Core SDK

1、安装必要依赖

  1. sudo yum -y install libunwind libicu

2、下载SDK

SDK列表:https://www.microsoft.com/net/download/core

  1. cd /home/downloads
  2. curl -sSL -o dotnet-2.0-preview.tar.gz https://aka.ms/dotnet-sdk-2.0.0-preview2-linux-x64-bin
  3. #preview版本下载地址需参考:https://www.microsoft.com/net/core/preview

3、SDK目录配置

  1. #创建SDK目录
  2. sudo mkdir -p /usr/dotnet/dotnet-2.0-preview
  3. #将SDK解压到指定目录中
  4. sudo tar zxf dotnet-2.0-preview.tar.gz -C /usr/dotnet/dotnet-2.0-preview

4、创建软连接

  1. sudo ln -s /usr/dotnet/dotnet-2.0-preview/dotnet /usr/local/bin

三、熟悉命令(cmd)

1、查看版本

  1. dotnet --version
  2. #2.0.0-preview2-006497

2、可选参数介绍

参数 介绍(en) 介绍(ken的翻译)
new Initialize .NET projects. 初始化项目(相当于通过VS模板新建项目)
restore Restore dependencies specified in the .NET project. 还原项目中的依赖(相当于VS创建 ASP.NET MVC,添加相关依赖)
run Compiles and immediately executes a .NET project. 启动项目
build Builds a .NET project. 编译项目
publish Publishes a .NET project for deployment (including the runtime). 发布项目(包含runtime)
test Runs unit tests using the test runner specified in the project. 启动单元测试
pack Creates a NuGet package. 创建nuget包
migrate Migrates a project.json based project to a msbuild based project. 迁移基于project.json,以兼容msbuild的编译
clean Clean build output(s). 清除项目中编译产生的输出
sln Modify solution (SLN) files. 修改解决方案文件.sln
add Add reference to the project. 添加引用
remove Remove reference from the project. 移除引用
list List reference in the project. 列出项目中的引用
nuget Provides additional NuGet commands. 通过nuget参数并附加一些参数,可以进行nuget包管理的一些操作
msbuild Runs Microsoft Build Engine (MSBuild). 使用msbuild进行编译
vstest Runs Microsoft Test Execution Command Line Tool. 启动命令行测试工具
-v/—version Display .NET Core SDK version. 查看 .NET Core SDK版本
-i/—info Display .NET Core information. 查看 .NET Core 详细信息
-d/—diagnostics Enable diagnostic output. 启用诊断
-v/—verbosity Set the verbosity level of the command. 设置冗长命令集?
-h/—help Show help. 查看帮助

四、HelloWorld项目

1、创建项目

  1. #1、创建&打开项目文件夹
  2. mkdir /projects && cd /projects
  3. #2、创建项目
  4. dotnet new console -o helloworld
  5. #dotnet new :创建&初始化项目
  6. #console : 模板类型(相当于VS创建项目选择控制台应用程序)
  7. #-o :指定output路径名,可以理解为项目文件夹名称,默认项目名称=项目文件夹名称,也可以用-n 单独指定项目名称
  8. #dotnet new console -n helloworld 效果等同于 dotnet new console -o helloworld
  9. #执行输出最后关键信息:
  10. The template "Console Application" was created successfully.
  11. Processing post-creation actions...
  12. Running 'dotnet restore' on helloworld/helloworld.csproj...
  13. Restoring packages for /projects/helloworld/helloworld.csproj...
  14. Installing Microsoft.NETCore.DotNetAppHost 2.0.0-preview2-25407-01.
  15. Installing Microsoft.Packaging.Tools 1.0.0-preview2-25401-01.
  16. Installing Microsoft.NETCore.DotNetHostResolver 2.0.0-preview2-25407-01.
  17. Installing NETStandard.Library 2.0.0-preview2-25401-01.
  18. Installing Microsoft.NETCore.Platforms 2.0.0-preview2-25405-01.
  19. Installing Microsoft.NETCore.DotNetHostPolicy 2.0.0-preview2-25407-01.
  20. Installing Microsoft.NETCore.App 2.0.0-preview2-25407-01.
  21. Generating MSBuild file /projects/helloworld/obj/helloworld.csproj.nuget.g.props.
  22. Generating MSBuild file /projects/helloworld/obj/helloworld.csproj.nuget.g.targets.
  23. Restore completed in 3.75 sec for /projects/helloworld/helloworld.csproj.
  24. Restore succeeded.
  25. #项目文件就在/projects/helloworld/中

2、输出结果分析

  1. #1、显示根据指定dotnet new console -o helloworld模板创建了项目
  2. The template "Console Application" was created successfully.
  3. #2、然后又主动调用了dotnet restore命令来还原项目的引用,主动安装依赖
  4. Processing post-creation actions...
  5. Running 'dotnet restore' on helloworld/helloworld.csproj...
  6. Restoring packages for /projects/helloworld/helloworld.csproj...

3、运行

  1. cd /projects/helloworld/
  2. dotnet run
  3. #运行结果
  4. Hello World!
  5. # 恭喜你,你的第一个.NET Core应用程序就这么诞生了
  6. #源代码请查看 /projects/helloworld/Program.cs 文件

五、备注

.NET Core 2.0项目模板

Templates Short Name Language Tags
Console Application console [C#], F#, VB Common/Console
Class library classlib [C#], F#, VB Common/Library
Unit Test Project mstest [C#], F#, VB Test/MSTest
xUnit Test Project xunit [C#], F#, VB Test/xUnit
ASP.NET Core Empty web [C#] Web/Empty
ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC
ASP.NET Core Web App (Razor Pages) razor [C#] Web/MVC/Razor Pages
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
ASP.NET Core Web API webapi [C#] Web/WebAPI
Nuget Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
Razor Page page Web/ASP.NET
MVC ViewImports viewimports Web/ASP.NET
MVC ViewStart viewstart Web/ASP.NET

不得不说:C#才是.NET平台的亲儿子啊

如何知道命令支持哪些参数?

答:利用好—help/-h 参数

  1. #示例:
  2. dotnet --help
  3. dotnet new --help
  4. dotnet restore --help
  5. dotnet new console --help
  6. dotnet new mvc --help

使用VS Code开发.NET Core控制台应用程序

一、前言

为什么选择VS Code

VS Code 是一款跨平台的代码编辑器,想想他的哥哥VS,并是微软出品的宇宙第一IDE,
那作为VS的弟弟,VS Code 也不会差,毕竟微软出品。反正ken是这么认为的

本篇开发环境

1、操作系统: Windows 10 X64
2、SDK: .NET Core 2.0 Preview
3、VS Code:1.14

二、安装&配置

1、VS Code下载&安装

(1)下载地址:https://code.visualstudio.com/
(2)安装步骤:一直下一步即可,没什么特别讲究的

2、依赖扩展安装

扩展 说明
C# 包括语法高亮显示、智能感知、定义、查找所有引用等。调试支持。网络核心(CoreCLR)。
Chinese (Simplified) 简体中文补丁包

快捷键(Ctrl+Shift+X)进入扩展管理页,直接搜索扩展名安装即可,或者点击左侧工具栏图标进入扩展管理页

macOS版本快捷键是 Shift+Commnad+X

.NET Core 快速入门教程 - 图4

三、项目创建&开发

1、创建项目

  1. #使用命令提示符(cmd)或者Windows PowerShell
  2. #1、打开项目文件夹
  3. d: && cd d:\projects
  4. #2、创建项目
  5. dotnet new console -n helloworld

2、插件安装

  • 打开项目文件夹

.NET Core 快速入门教程 - 图5

  • 必须插件安装

打开资源管理器(Ctrl+Shift+E),然后打开Progrom.cs文件
VS Code检测到缺少两个插件
OmniSharp,.NET Core Debugger 会自动下载安装
.NET Core 快速入门教程 - 图6
安装完成后的完整输出:

  1. Updating C# dependencies...
  2. Platform: win32, x86_64
  3. Downloading package 'OmniSharp (.NET 4.6 / x64)' (15622 KB) .................... Done!
  4. Downloading package '.NET Core Debugger (Windows / x64)' (43510 KB) .................... Done!
  5. Installing package 'OmniSharp (.NET 4.6 / x64)'
  6. Installing package '.NET Core Debugger (Windows / x64)'
  7. Finished

3、项目编译与调试

插件安装完毕之后,VS Code会提示缺少必要的编译&调试配置,是否添加,选择Yes即可
.NET Core 快速入门教程 - 图7

  • 启动调试

快捷键F5直接启动调试即可

通过调试面板(Ctrl+Shift+D)图形化操作也可

调试输出结果:

  1. -------------------------------------------------------------------
  2. You may only use the Microsoft .NET Core Debugger (vsdbg) with
  3. Visual Studio Code, Visual Studio or Visual Studio for Mac software
  4. to help you develop and test your applications.
  5. -------------------------------------------------------------------
  6. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0-preview2-25407-01\System.Private.CoreLib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
  7. Loaded 'd:\Projects\helloworld\bin\Debug\netcoreapp2.0\helloworld.dll'. Symbols loaded.
  8. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0-preview2-25407-01\System.Runtime.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
  9. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0-preview2-25407-01\System.Console.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
  10. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0-preview2-25407-01\System.Threading.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
  11. Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0-preview2-25407-01\System.Runtime.Extensions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
  12. Hello World!
  13. The program '[4180] helloworld.dll' has exited with code 0 (0x0).

四、备注

毕竟是微软的工具+微软的SDK,结合起来是蛮方便的
比起 .NET Core 1.0 刚出来的时候(毕竟当时VS Code也简陋),少了很多步骤。是真的爽。
.NET Core 搞起来~

使用VS Code进行C#代码调试的技巧

一、前言

什么是代码调试?

通过调试可以让我们了解代码运行过程中的代码执行信息,比如变量的值等等。
通常调试代码是为了方便我们发现代码中的bug。ken.io觉得熟练代码调试技巧是成为合格程序员的基本要求。

本篇开发环境

1、操作系统: Windows 10 X64
2、SDK: .NET Core 2.0 Preview
3、IDE:VS Code 1.14

二、开始调试

1、设置断点

在代码编辑区域,点击左侧代码行行号的左边,即可在该行设置断点
.NET Core 快速入门教程 - 图8

2、启动调试

使用菜单:调试->启动调试,或者使用快捷键F5启动调试
.NET Core 快速入门教程 - 图9
启动调试后,程序启动,并会停留在第一个断点这一行。且这行的代码并未执行。
VS Code会自动唤出Debug工作区,本文将逐步介绍常用功能。

三、Debug工作区介绍

1、顶部Debug工具栏

按钮&快捷键 说明(ken.io的翻译)
绿色向右箭头(F5) 继续执行程序,如果遇到断点则会停留到该断点
蓝色向右箭头(F10) 单步跳过:执行一条语句,但是遇到方法调用时不进入,直到方法执行完成后直接继续。
蓝色向下箭头(F11) 单步调试:执行一条语句,遇到方法调用时会进入方法进行调试
蓝色向上箭头(Shift+F11) 单步跳出:执行当前当前方法并到下一步骤,如果当前方法有断点则会到下一个断点
绿色环形箭头(Ctrl+Shift+F5) 重新启动调试
红色方块(Shift+F5) 停止调试

2、变量区域

管理当前方法已经声明的变量信息
.NET Core 快速入门教程 - 图10

3、监视

可以添加要监视的表达式,比如i*2+5
.NET Core 快速入门教程 - 图11
如果i的值发生变化,将会实时计算结果

4、调用堆栈

显示当前调试的堆栈信息
.NET Core 快速入门教程 - 图12

说明(ken.io的翻译)
heelodotnet.dll 调用的动态链接库
hellodotnet 命名空间
Program.Main(string[] args) 调用的类&方法
Line 当前调用方法的行号

如果有多个调用的链接库可以鼠标单击切换。查看变量等信息

5、管理断点

.NET Core 快速入门教程 - 图13

6、调试过程中修改变量

选中要修改的标量,鼠标右键->设置值(快捷键F2也可以)
.NET Core 快速入门教程 - 图14
设置值:
.NET Core 快速入门教程 - 图15
回车键保存,然后F10进行单步跳过
.NET Core 快速入门教程 - 图16
本来i=0,randomNum=28,如果继续执行result=false,将无法执行if语句块。
修改后randomNum=0,执行后result=true,让本来会被跳过的if语句块可以被调试。

四、备注

VS Code调试 .NET Core快捷键

快捷键 说明(ken.io的翻译)
快捷键:F5 继续执行程序,如果遇到断点则会停留到该断点
快捷键:F10 单步跳过:执行一条语句,但是遇到方法调用时不进入,直到方法执行完成后直接继续。
快捷键:F11 单步调试:执行一条语句,遇到方法调用时会进入方法进行调试
快捷键:Shift+F11 单步跳出:执行当前当前方法并到下一步骤,如果当前方法有断点则会到下一个断点
快捷键:Ctrl+Shift+F5 重新启动调试
快捷键:Shift+F5 停止调试
快捷键:F9 切换断点:跳到下一个断点
快捷键:Shift+F9 列断点:在当前光标的下一行增加一个断点