Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 来创建,其优点是简单方便,但需要安装最新版本Visual Studio 2017 preview 15.3 。另一种方式是使用Visual Studio Code来创建,Visual Studio Code 则是一款轻量级的编辑器 ,可在多种操作系统中运行,如果情况允许,笔者更建议使用Visual Studio Code来进行开发,可在多种平台开发,同时也更灵活,享受更多开发的乐趣。
1.1. 先决条件
1.1.1. Core 2.0
Core Core 2.0 正式版。
安装完成后,可在命令行(cmd)中键入命令查看安装信息:
dotnet --info
Core 2.0 已经成功安装
2017-08-20-22-07-281.1.2. 安装Visual Studio 2017
如果需要使用Visual Studio 2017 来开发,需要安装 Visual Studio 2017 Preview version 15.3,个人开发者可选择社区版,社区版的功能对于日常的开发已经足够,并且是免费。
Core应用则可以只安装响应部分,如下图所示:
安装Visual Studio1.1.3. 安装Visual Studio Code
Visual Studio Code 是一个轻量级的源代码编辑器,可以运行在Windows,MacOs,和Linux。通过安装扩展可用来开发诸如C++、C#、 Python、PHP、Go等语言。
安装完成后,需要安装c#开发扩展如下图所示
vscode1.2. 通过Visual Studio 2017 创建应用
通过Visual Studio 2017 创建应用非常简单,在新建项目时选择 Core webapplication即可
create core webapplication在确认选择后,还会弹出一个对话框,选择代码结构模板,此处任意选择Web Application(MVC)
,项目即可生成完毕。在Visual Studio Core 网站即可运行。
1.3. 通过Visual Studio Code 创建应用
首先可在本地新建文件夹,然后打开Visual Studio Code ,选择打开刚才的文件夹
open vscode在主菜单中依次选择“查看” > “集成终端”。在集成终端中输入 dotnet new mvc
命令,文件夹中会生成 mvc 的模板
模板建立好后,可在集成终端中输入dotnet run
命令,mvc 站点即可运行。
要在Visual Studio Code Core配置文件
configure此时会生成launch.json文件,文件中有三种launch方式,以web节点为例
{
"name": Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceRoot}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
}
}
将program节点中的路径改为自己程序集的路径即可,例如${workspaceRoot/bin/Debug/netcoreapp2.0/WebApplicationSample1.dll
然后点击左侧调试图标,在左上角可选择启动调试,启动后会弹出,对话框提示找不到build命令,选择配置任务运行程序。
配置完成后会多一个task.json文件,此时再次开启调试,便可运行调试。
debug 2017-08-23-23-13-011.4. Core 应用
托管 Core 应用有多种方式,即可在传统的windows平台,也可以部署在开源的Linux上,还可以通过docker容器来部署,本节将讲解多种方式部署 Core 应用
1.4.1. Core应用
Core 应用需要一个Host , Host必须要实现IWebHost
接口,接口包括Start
方法。创建一个Host 需要使用WebHostBuilder
,它会返回一个WebHost
实例,用于处理请求。
Core应用中,可以看到Program.cs文件中的 'void Main'方法,此方法是整个应用的入口,在入口中调用了CreaDefaultbuilder
来创建Host,代码如下:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
CreateDefaultBuilder
创建了WebHostBuilder
的实例来构建启动 server 的 host。host需要一个实现IServer
接口的server。内建的Web server 包括 Kestrel 和 Httpsys,默认使用Kestrel.在命令行工具中执行dotnet run
命令,此时即可启动整个应用。
Core中可以用两种HTTP server,它们请求原理如图所示:
Kestrel HttpSysKestrel 是跨平台的HTTP server 基于libuv(一个跨平台的异步I/O library)
Httpsys 是基于Windows内核驱动程序Http.Sys的HTTP server。Http.Sys是成熟的技术,可以防范多种攻击,并提供全功能Web服务器的鲁棒性,安全性和可扩展性。IIS本身作为HTTP侦听器运行在Http.Sys之上。
在windows平台上还可以使用Http.Sys作为Web Server
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseHttpSys()
.Build();
1.4.2. Core应用
Core的跨平台性,因此在Liunx环境下也可以使用,需要注意的是在Linux环境下是不能选择Http.Sys作为Web server,而只能选择Kestrel。本文选用 Ubuntu 16.04 系统,作为示例。
第一步:注册微软key为可信任
curl | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
注:如果没有curl需要安装curl。命令 sudo apt-get install curl
第二步:将微软的安装地址设为可信任的列表
sudo sh -c 'echo "deb [arch=amd64] trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
第三步:更新apt-get
版本
sudo apt-get update
Core 2.0
sudo apt-get install dotnet-sdk-2.0.0
Core 版本信息
dotnet --info
2017-08-20-14-29-41
使用命令生成项目模板
dotnet new mvc -o app
以上命令会在当目录下面创建一个app文档夹,首先我们要将根路径跳转到app文件夹下面
cd app
Core应用在Linux环境下托管起来,只需要运行下面一条命令
dotnet run
2017-08-20-14-32-52
如果选择Http.Sys作为Linux下的服务器则会抛出异常
2017-08-23-23-11-011.5. 总结
从本节可以看出,不管是在传统的Windows环境还是Linux环境,都能通过Visual Studio Core Core自带的Web server来托管应用。
参考资料