ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

以前两篇文章简析.NET Core 以及与 .NET Framework的关系.NET Core的构成体系从整体上介绍.NET Core,接下来计划用一个系列对ASP.NET Core的运行原理进行剖析。html

ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,而且在推出初期命名为ASP.NET 5,但随着 .NET Core 的成熟,以及 ASP.NET 5的命名会使得外界将它视为 ASP.NET 的升级版,但它实际上是新一代从头开始打造的 ASP.NET 核心功能,所以微软宣布将它改成与 .NET Core 同步的名称,即 ASP.NET Core。linux

ASP.NET Core 可运行于 Windows 平台以及非 Windows 平台,如 Mac OSX 以及 Ubuntu Linux 操做系统,是 Microsoft 第一个具备跨平台能力的 Web 开发框架。web

微软在一开始开发时就将 ASP.NET Core 开源,所以它也是开源项目的一员,由 .NET 基金会 (.NET Foundation) 所管理。npm

正式版的.NET Core已于今天发布(2016年6月27日),具体可看微软 .NET Core 1.0 正式发布下载json

核心框架

ASP.NET Core 在 .NET Core 的基础上发展,目前规划的功能有:ubuntu

  • ASP.NET Core MVC: ASP.NET Core MVC 提供了开发动态web站点的API,包括了WebPages 和 WebAPI ,最终可运行在IIS 或 自托管(self-hosted)的服务器中。windows

  • DependencyInjection: 包含了通用的依赖注入接口,用于在ASP.NET Core MVC中使用。服务器

  • Entity Framework Core: 与以前版本的EntityFramework版本相似是一个轻量级的ORM框架,包括了Linq,POCO和Codefirst的支持。app

  • ASP.NET Core Identity: 用于在ASP.NET Core web applications构建用户权限系统的框架,包括了membership、login等功能,同时也能够方便的扩展和自定义。框架

ASP.NET Core APP 建立与运行

1、安装the .NET Core SDK for Windows(Linux、MAC)

以Windows为例,(下载地址),
安装完成后能够用命令dotnet -v查看版本号。

C:\Users\stephen>dotnet -v
Telemetry is: Enabled
.NET Command Line Tools (1.0.0-preview1-002702)
Usage: dotnet [common-options] [command] [arguments]

2、命令行生成模版项目

开发一个webapp能够从零开始建立文件,也能够经过命令行生成一个空的项目模版,下面的代码用于从零开始建立模版。

mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new

依次执行命令后,即可在当前路径下,生成模版。

模版

模版包括如下三个文件:

  • project.json:

主掌项目的运行期的配置设置,包含项目的包参考 (Package References)、项目的基本设置、引导指令、包含或排除指定目录、以及建造时的相关事件指令等。

  • Program.cs:

程序入口文件

  • project.lock.json:

与project.json相比,是project.json文件中引用包的完整引用列表。

3、修改project.json

project.json是用于定义项目须要依赖的资源,每一个WebApp 须要一个hosting 程序(IIS、IISExpress等),而这次使用Kestrel (什么是kestrel?),在project.json中加入对Kestrel的依赖代码清单以下。

"dependencies": {
  "Microsoft.NETCore.App": {
    "type": "platform",
    "version": "1.0.0-rc2-3002702"
  },
  "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final"
},

4、下载依赖包部署网站

在WebApp部署时(dotnet restore)根据project.json的依赖文件,依靠nuget下载依赖包,完成对整个程序的restore。(相似于Nodejs的 npm restore)

C:\Users\stephen\.nuget\packages能够看到nuget已经下载到本地的包,在开始部署前nuget是不会加载依赖包,下图可看到目前nuget并无下载任何包。

nuget

而后执行命令

dotnet restore

能够看到,nuget已经自动将须要依赖包下载到本地

nuget

5、添加Startup.cs文件

对于一个ASP.NET Core 程序而言,Startup Class 是必须的。ASP.NET Core在程序启动时会从assemblies中找到名字叫Startup的类,若是存在多个名为Startup的类,则会先找到项目根名称空间下的Startup类。

在Startup必须定义Configure方法,而configureServices方法则是可选的,方法会在程序第一次启动时被调用,相似传统的ASP.NET MVC的路由和应用程序状态都可在Startup中配置,也能够在此安装所需中间件等等。Startup的详细功能的对于startup.cs中的configure和configureServices方法会在后续文章中详解

在刚才文件路径下添加Startup.cs文件,并复制以下代码:

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;

namespace aspnetcoreapp
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello from ASP.NET Core!");
            });
        }
    }
}

6、Web Hosting 配置

在Program.cs文件中复制以下代码,指定WebApp宿主程序为Kestrel:

using System;
using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

7、编译

dotnet build

代码完成后,须要调用Roslyn编译器将代码编译为assemblies,存储至bin文件夹中。按照上一节所述(简析 .NET Core 构成体系),
ASP.NET Core App 能够编译为IL的assemblies外,还能够经过native直接编译为机器码。

新增bin文件夹

8、启动

输入启动命令,Kestrel托管WEB程序,并在5000端口监听,至此整个程序启动起来。

dotnet run

run

run

总结

本节介绍了ASP.NET Core 项目从建立、配置、编译、发布、运行的过程,ASP.NET Core与以前的ASP.NET相比具备更高的透明度和灵活性,能够快速的在各个操做系统中开发与运行。

本节使用Windows操做系统,但目前微软也在 linuxmac 下提供了相似的命令行工具(连接地址),方便在 linuxmac 下开发与部署,在后面文章中会详细讲解,本节再也不累述。


做者:帅虫哥 出处: http://www.cnblogs.com/vipyoumay/p/5620373.html

参考连接

【1】 https://docs.asp.net/en/1.0.0-rc2/getting-started.html

相关文章
相关标签/搜索