我們下面通過在Visual Studio 2017中創建一個空的Web應用程序來詳細說明下asp.net core項目目錄結構:

1、項目結構說明

(1)、依賴項
這里主要分兩部分SDK, 目前這兩部分下面都只有一項。

Nuget
包含Microsoft.AspNetCore.App, 展開它看一下MVC、EF等等都有,它包含了:
· ASP.NET Core 團隊支持的所有包。
· Entity Framework Core 支持的所有包。
· Entity Framework Core 使用的內部和第三方依賴關系。
猛地一看,這是一非常大而全的包了asp.net core模塊化有點不一致, 非常不爽。
其實這些程序集不會隨着項目發布一起出現在部署包中, 所以發布包不會變大反而會變小, 不必擔心。
SDK:
SDK中包含了一項: Microsoft.NETCore.App, 它是.NET Core 的部分庫。 也就是 .NETCoreApp 框架。 它依賴於更小的 NETStandard.Library。
SDK同樣是一個大而全的集和, 在部署的時候, SDK中的引用依然不會出現在部署包中, 如下圖, 是不是很精簡。

(2)、launchSettings.json
顧名思義, 這是一個啟動配置文件, json格式的。
通過上面的項目結構圖可以發現, 常見的web.config或app.config等xml格式的config文件找不到了,取而代之和的都是json。
打開這個json看一下。 一項項的不好解釋, 不過我們可以通過windows 中的 vs2017中的圖形化的配置界面(右鍵當前項目->屬性->調試),如下圖所示:

(3)、wwwroot文件夾
看這名字好像是IIS的默認網站根目錄, 它包含了所有的"前端"的靜態文件, css、images、js、一個名為lib的文件夾和favicon.ico圖標文件。
lib中默認內容是bootstrap和jquery相關內容。
在Startup中, 會調用一個無參數的UseStaticFiles()方法, 將此目錄標記到網站根目錄。

Startup.cs 的區別在於Startup.cs ,這個可以通過 Program.cs 中的代碼看出來:
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();

曾經使用過 ASP.NET,我們大家都知道以下兩點:
1、Global.asax 文件,可以在啟動 Web 應用程序期間編寫代碼來執行的一個地方。
2、 Web.config 文件,用來包含應用程序需要執行的所有配置參數。
但是在 ASP.NET Core 中,這些文件全部消失,取而代之的是使用 Startup.cs 加載配置和啟動代碼。
Startup.cs文件中有一個 Startup 類,在這個類中可以配置應用程序,甚至配置配置源。
2、項目啟動介紹
應用程序入口類

這是一個大家非常熟悉的Main方法, 也就是應用的起點, 啟動后通過UseStartup<Startup>()指定下文的Startup啟動文件進行啟動。
在應用啟動的時候,會執行CreateWebHostBuilder方法,在這個方法中通過類Startup創建了默認的HostBuilder。
3、應用啟動類

這是.NET Core非常重要的地方, 包括加載配置, 通過依賴注入加載組件, 注冊路由等都在此處進行。
Startup 類必須是公開的,且必須包含以下兩個方法
1、ConfigureServices()方法
public void ConfigureServices(IServiceCollection services){ }
ConfigureServices() 方法用於定義應用程序所需要的服務,例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 等等。
2、Configure() 方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env){ }
Configure() 用於定義請求管道中的中間件。

Web項目模板默認在項目啟動的時候調用IApplicationBuilder.run方法,在當前HTTP上下文(HttpContext)中輸出了Hello World!
Startup 類中的 Configure() 方法用於配置和構建 HTTP 請求管道的地方。該怎么理解這句話呢?
其實也就是說,Configure() 方法可以用來定義我們的應用程序如何響應請求。對於任意網址,默認情況下它只會輸出 Hello World!
例如,如果我們想要為諸如 index.html 之類的靜態文件提供服務,則需要向 Configure() 方法添加一些代碼。
例如,如果想要給 ASP.NET MVC 控制器發送錯誤頁面或路由請求,都需要在這個 Configure() 方法中做一些工作。
比如我們還可以用app.UseAuthentication()來做身份驗證。
我們使用 Use、Run 和 Map 來配置 HTTP 管道。
Use 方法可使管道短路(即不調用 next 請求委托)。
Run 是一種約定,並且某些中間件組件可公開在管道末尾運行的 Run[Middleware] 方法。
Map* 擴展用作約定來創建管道分支。