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


  創建好項目后,解決方案資源管理器窗口里我們看到,增加了不少文件夾及文件,如下圖所示:

  

  在解決方案文件夾中,找到項目文件夾,該文件夾又包含五個子文件夾 -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。 在后面的章節,將介紹這兩個類是如何實現配置和運行您的應用程序的。

 

csproj項目文件:定義依賴項

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

  1、沒有GUID  - 以前,全局唯一標識符(GUID)大量用於項目文件中;

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

  3、沒有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。

 

 

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類主要負責應用的兩個方面的配置:

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

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

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

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM