《ASP.NET Core In Action》讀書筆記系列五 ASP.NET Core 解決方案結構解析1

  建立好項目後,解決方案資源管理器窗口裏咱們看到,增長了很多文件夾及文件,以下圖所示:git

  

  在解決方案文件夾中,找到項目文件夾,該文件夾又包含五個子文件夾 -Models、Controllers、Views、Properties、及wwwroot;Models、Controllers、Views對應MVC模型,控制器和視圖。 Properties文件夾包含一個文件(launchSettings.json),它控制Visual Studio如何運行和調試應用程序。 wwwroot文件夾很特別,由於它是應用程序中瀏覽器能夠直接訪問的惟一的文件夾,你能夠在這裏面存放應用須要用到的CSS,JavaScript,圖片或靜態HTML文件。 瀏覽器沒法訪問wwwroot以外的文件。雖然磁盤上存在wwwroot和Properties文件夾,但您能夠看到解決方案資源管理器將它們顯示爲特殊節點,不按字母順序排列,位於項目的頂部區域。 在項目中還有兩個特殊的節點,Dependencies和Connected Services,它們在磁盤上沒有相應的文件夾。 它們顯示項目全部依賴項的集合,例如NuGet包、客戶端依賴項和項目所依賴的遠程服務。在目根目錄中,還有幾個JSON文件-appsettings.json、bundleconfig.json和bower.json。 它們提供了各類配置設置,其中一些在運行時使用,另外一些在編譯時用於構建應用程序。(Bower是一個客戶端資產管理系統,用於獲取CSS和JavaScript庫。 因爲Bower被放棄維護,ASP.NET團隊正在探索替代方案。 bower.json文件極可能會在後面的版本中從默認模板中刪除並替換)。項目中最重要的文件是WebApplication2.csproj,由於它描述瞭如何構建你的項目。 Visual Studio未在解決方案中顯式列出csproj文件,但能夠在項目名稱右鍵並選擇「編輯」菜單對其進行編輯。Visual Studio還在項目文件夾中列出了兩個C#文件-Program.cs和Startup.cs。 在後面的章節,將介紹這兩個類是如何實現配置和運行您的應用程序的。github

 

csproj項目文件:定義依賴項json

  csproj文件是.NET應用程序的項目文件,包含.NET工具構建項目所需的詳細信息。 它定義了正項目的類型(Web應用程序、控制檯應用程序、類庫),項目的目標平臺(.NET Core、.NET Framework 4.五、Mono等),以及項目所依賴的NuGet包。項目文件一直是.NET應用程序的核心,ASP.NET Core對其進行了調整,使其更易於閱讀和編輯。 這些調整以下:瀏覽器

  一、沒有GUID  - 之前,全局惟一標識符(GUID)大量用於項目文件中;
服務器

  二、隱式文件包括 (Implicit file includes—)- 之前,項目中的每一個文件都必須列在csproj文件中,項目才能編譯; 如今,文件會被自動編譯;app

  三、沒有NuGet包dll的路徑 - 之前,csproj必須包含dll的路徑,以及在packages.xml文件中列出依賴項。 如今,您能夠直接在csproj中引用NuGet包,不須要指定磁盤上路徑;框架

 

 

  這些變化使項目文件更加簡潔,下圖顯示了整個csproj文件:
函數

  

 

 

  上圖中Project元素的Sdk屬性設定編譯項目的默認設置,TargetFramework元素設定應用程序的運行框架,對於.NET Core 2.0項目,值爲netcoreapp2.0; 對於完整的.NET Framework 4.6.1項目,值爲net461。對於簡單的應用程序,咱們不須要更改項目文件,若是你想編輯csproj文件,不用像以前的版本那樣先關閉項目,直接用前面提到的方法編輯便可。對項目文件最多見的更改是添加項目引用(PackageReference元素下NuGet包),.NET Core項目默認狀況下,只引用一個NuGet包-Microsoft.AspNetCore.All,它是一個元數據包(元數據包是一個不包含代碼的NuGet包,它引用一個或多個其餘NuGet包,經過將元數據包添加到應用程序,能夠方便地和隱式地添加它的全部包引用),包含了ASP.NET Core 2.0相關的全部軟件包,但這不意味着,應用將使用全部的ASP.NET Core包。在ASP.NET Core 2.1中,Microsoft.AspNetCore.App元數據包引用默認已經安裝上。 您能夠在https://github.com/aspnet/Announcements/issues/287 查看Microsoft.AspNetCore.App和全部元數據包的區別。工具

 

  簡化後的項目文件更易手工編輯,這有利於開發跨平臺應用。若是仍然使用Visual Studio,你依然能夠像之前同樣添加項目引用,管理NuGet包等。有關csproj格式更改的更多詳細信息,可參閱https://docs.microsoft.com/en-us/dotnet/core/tools/csproj。
ui

 

 

Program類:構建Web主機

 

 

  全部ASP.NET Core應用程序的啓動方式與.NET控制檯應用程序相同 - 使用Program.cs文件。 此文件包含靜態 Main函數(這是控制檯應用程序的標準特性)。 應用中必須包含這個方法,它在啓動Web應用程序時調用。 在ASP.NET Core應用程序中,它用於構建和運行一個IWebHost實例,以下圖所示,它顯示了默認的Program.cs文件。 IWebHost是ASP.NET Core應用程序的核心,包含應用程序配置和偵聽請求的Kestrel服務器,並返回客戶端請求迴應。

  

  Main函數包含建立Web服務器並開始偵聽請求所需的基本初始化代碼,在實例化IWebHost以前,經過CreateDefaultBuilder方法定義IWebHost的配置。應用程序的大部分配置都發生在CreateDefaultBuilder方法中,它還將一些職責委託給一個單獨的類Startup。 這個類經過泛型方法UseStartup<> 引用,在這裏能夠配置應用程序的服務和中間件間。

  這裏有很多人提出這樣的疑問,爲何要把配置分拆到兩個類中?通常來講,Program類負責應用的基礎結構,例如:Http服務器、與IIS集成、配置源;Startup定義應用將使用哪些功能、組件以及中間件。以下圖所示:

 

 

  兩個不一樣的ASP.NET Core 應用程序的Program類一般是類似的,但Startup類一般會有很大不一樣(儘管它們一般遵循相似的模式)。 隨着應用程序的增加,不多會修改Program,可是,會常常修改Startup。 例如,向項目中添加新的NuGet依賴項,一般須要在Startup添加相應的代碼才能使用。

 

Startup類:配置應用程序

  Startup類主要負責應用的兩個方面的配置:

    一、服務註冊 - 您的應用程序所依賴的任何類 ,不管是框架使用的類仍是應用程序自身須要使用的類都必須註冊,只有這樣,這些類才能在運行時被正常構建;

    二、中間件和MVC  - 應用程序如何處理和響應請求;

  在不一樣的方法中配置這兩個方面的功能,服務註冊在方法ConfigureServices中,中間件和MVC 在方法Configure中。這兩個方法大體的樣子以下所示:

  Program中建立的WebHostBuilder先調用 ConfigureServices 而後調用Configuare,以下圖所示:每一個調用都會配置應用程序的不一樣部分。因爲這樣的調用順序,Configuare方法中可使用在ConfigureServices方法中註冊的任何服務。調用完成後,WebHostBuilder經過調用Build()方法,建立IWebHost. 有一個地方須要注意,Startup類自身沒有實現相應的接口,WebHostBuilder經過反射來調用預義的方法Configure和ConfigureServices,這樣的設計使這個類更加靈活,咱們能夠修改簽名,添加額外的參數。更詳細的細節將在後面章節介紹。

 

謝謝你的閱讀,下節見!若是期待本系列,請點一下推薦!

相關文章
相關標籤/搜索