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

来源:http://www.cnblogs.com/vipyoumay/archive/2016/06/27/5620373.html
-Advertisement-
Play Games

之前兩篇文章簡析.NET Core 以及與 .NET Framework的關係和.NET Core的構成體系從總體上介紹.NET Core,接下來計劃用一個系列對ASP.NET Core的運行原理進行剖析 ...


之前兩篇文章簡析.NET Core 以及與 .NET Framework的關係.NET Core的構成體系從總體上介紹.NET Core,接下來計劃用一個系列對ASP.NET Core的運行原理進行剖析。

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。

ASP.NET Core 可運行於 Windows 平臺以及非 Windows 平臺,如 Mac OSX 以及 Ubuntu Linux 操作系統,是 Microsoft 第一個具有跨平臺能力的 Web 開發框架。

微軟在一開始開發時就將 ASP.NET Core 開源,因此它也是開源項目的一員,由 .NET 基金會 (.NET Foundation) 所管理。

正式版的.NET Core已於今天發佈(2016年6月27日),具體可看微軟 .NET Core 1.0 正式發佈下載

核心框架

ASP.NET Core 在 .NET Core 的基礎上發展,目前規劃的功能有:

  • ASP.NET Core MVC: ASP.NET Core MVC 提供了開發動態web站點的API,包括了WebPages 和 WebAPI ,最終可運行在IIS 或 自托管(self-hosted)的伺服器中。

  • DependencyInjection: 包含了通用的依賴註入介面,用於在ASP.NET Core MVC中使用。

  • Entity Framework Core: 與之前版本的EntityFramework版本類似是一個輕量級的ORM框架,包括了Linq,POCO和Codefirst的支持。

  • ASP.NET Core Identity: 用於在ASP.NET Core web applications構建用戶許可權系統的框架,包括了membership、login等功能,同時也可以方便的擴展和自定義。

ASP.NET Core APP 創建與運行

一、安裝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]

二、命令行生成模版項目

開發一個webapp可以從零開始創建文件,也可以通過命令行生成一個空的項目模版,下麵的代碼用於從零開始創建模版。

mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new

依次執行命令後,便可在當前路徑下,生成模版。

模版

模版包括以下三個文件:

  • project.json:

主掌項目的運行期的配置設置,包含項目的包參考 (Package References)、項目的基本設置、引導指令、包含或排除指定目錄、以及建造時的相關事件指令等。

  • Program.cs:

程式入口文件

  • project.lock.json:

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

三、修改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"
},

四、下載依賴包部署網站

在WebApp部署時(dotnet restore)根據project.json的依賴文件,依靠nuget下載依賴包,完成對整個程式的restore。(類似於Nodejs的 npm restore)

C:\Users\stephen\.nuget\packages可以看到nuget已經下載到本地的包,在開始部署前nuget是不會載入依賴包,下圖可看到目前nuget並沒有下載任何包。

nuget

然後執行命令

dotnet restore

可以看到,nuget已經自動將需要依賴包下載到本地

nuget

五、添加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!");
            });
        }
    }
}

六、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();
        }
    }
}

七、編譯

dotnet build

代碼完成後,需要調用Roslyn編譯器將代碼編譯為assemblies,存儲至bin文件夾中。按照上一節所述(簡析 .NET Core 構成體系),
ASP.NET Core App 可以編譯為IL的assemblies外,還可以通過native直接編譯為機器碼。

新增bin文件夾

八、啟動

輸入啟動命令,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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • When using chmod -R o+rx /data , you set the execute permission on all directories as well as files in the /data directory. To set the execute permiss... ...
  • 我在學習mvc4框架的時候,因為是筆記本,覺得裝了一個vs就很大了,再裝一個sql server 就更麻煩,因此,就想到使用vs自帶的localDB,直接生成預覽的時候是沒有問題的,但是當把mvc4的項目發佈,然後部署到iis上之後,localDB就連接不上了,百度了很久,找到瞭解決方案,特此記錄: ...
  • Nop中定義了ICacheManger介面,它有幾個實現,其中MemoryCacheManager是記憶體緩存的一個實現。 MemoryCacheManager: 緩存的添加,在需要的地方構建cache key然後調用ICacheManger介面存儲起來: 這個ICacheManger的Get方法其實 ...
  • 前言 如果你還不知道ZKEACMS,不妨先瞭解一下。 ASP.NET MVC 開源建站系統 ZKEACMS 推薦,從此網站“拼”起來 官方地址:http://www.zkea.net/zkeacms 下載地址:https://github.com/SeriaWei/ASP.NET-MVC-CMS/r ...
  • 命令模式:將一個請求封裝為一個對象,從而是你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。 命令模式有如下優點:1.它能較容易地設計一個命令隊列;2.在需要的情況下,可以較容易地將命令記入日誌;3.允許接收請求的一方決定是否要否決請求;4.可以容易地實現請求的撤銷和 ...
  • MXS&Vincene ─╄OvЁ &0000025─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很殘酷,明天更殘酷,後天很美好,但是絕大部分人是死在明天晚上,只有那些真正的英雄才能見到後天的太陽。 MXS&Vincene ─╄OvЁ:We're here to put ...
  • .net 分散式集群監控平臺,用於集群的性能監控,應用耗時監控管理,統一日誌管理等多維度的性能監控分析。 ...
  • .net 動態腳本引擎, 用於解決.net環境windows系統下類似java中Grovvy的功能和方向。 在互聯網項目可以用來做一些功能,如動態營銷活動(營銷業務解耦和剝離),規則引擎,流程引擎,windows運維腳本,源碼式插件開發。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...