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

相關文章
相關標籤/搜索