ASP.NET Core 專案資料夾解讀新框架
引言
庖丁解牛:“始臣之解牛之時,所見無非牛者;三年之後,未嘗見全牛也。”
正文
首先貼出來專案資料夾的截圖:
project.json 和global.jason
project.json是 .NET Core 專案中最重要的一個配置檔案,類似於.NET Framework上的 .csproj檔案。
首先,從我們 通過 Visual Studio 建立的專案 xproj 的 project.json︰
{
“version”: “1.0.0-*”,
“buildOptions”: {
“emitEntryPoint”: true
},
“dependencies”: {
“Microsoft.NETCore.App”: {
“type”: “platform”,
“version”: “1.0.0”
}
},
“frameworks”: {
“netcoreapp1.0”: {
“imports”: “dnxcore50”
}
}
}
dotnet new 命令建立專案的 project.json:
{
“version”: “1.0.0-*”,
“buildOptions”: {
“debugType”: “portable”,
“emitEntryPoint”: true
},
“dependencies”: {},
“frameworks”: {
“netcoreapp1.0”: {
“dependencies”: {
“Microsoft.NETCore.App”: {
“type”: “platform”,
“version”: “1.0.0”
}
},
“imports”: “dnxcore50”
}
}
}
1.1.2 Properties——launchSettings.json
啟動配置檔案,用於應用的啟動準備工作,包括環境變數,開發埠等。
{
"iisSettings": { #選擇以IIS Express啟動
"windowsAuthentication": false, #是否啟用windows身份驗證
"anonymousAuthentication": true, #是否啟用匿名身份驗證
"iisExpress": {
"applicationUrl" : "http://localhost:24269/", #IIS Express隨機埠
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApplication": { #選擇本地自宿主啟動,詳見Program.cs檔案。刪除該節點也將導致Visual Studio啟動選項缺失
"commandName": "Project", #
"launchBrowser": true,
"launchUrl": "http://localhost:5000", #本地自宿主埠
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
2.1.3Startup.cs
該檔案是ASP.NET Core的啟動入口檔案(聯想OWIN開發);專案執行時,編譯器會在程式集中自動查詢StartUp.cs檔案讀取啟動配置。除了建構函式外,它可以定義Configure和ConfigureService方法。(英文版說明資訊)
Program.cs Configures the host of the ASP.NET Core app.
Startup.cs Configures services and the request pipeline. See Startup.
(1)建構函式
用來啟動配置檔案
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
if (env.IsDevelopment()) //讀取環境變數是否為Development,在launchSettings.json中定義
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
}
(2) ConfigureServices
ConfigureServices 用來配置我們應用程式中的各種服務,它通過引數獲取一個IServiceCollection 例項並可選地返回 IServiceProvider。ConfigureServices 方法需要在 Configure 之前被呼叫。我們的Entity Framework服務,或是開發者自定義的依賴注入(ASP.NET Core自帶的依賴注入也是無所不在),更多內容請見官方文件
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
(3) public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
(3)Configure
這些中介軟體決定了我們的應用程式將如何響應每一個 HTTP 請求。它必須接收一個IApplicationBuilder引數,我們可以手動補充IApplicationBuilder的Use擴充套件方法,將中介軟體加到Configure中,用於滿足我們的需求。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseMvc(routes => //MVC路由配置
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
2.1.4 wwwroot和bower.json
wwwroot 是一個存放靜態檔案的資料夾,存放了注入css,js,img等檔案內容。說為什麼.NET core開發靈活度提高,檔案配置是手動配置,是其中一個原因。既然有存放靜態檔案的,那麼也有存放檔案引用的bower.json:
{
"name": "asp.net",
"private": true,
"dependencies": {
"bootstrap": "3.3.6",
"jquery": "2.2.0",
"jquery-validation": "1.14.0",
"jquery-validation-unobtrusive": "3.2.6"
}
}
bower.json記錄了專案需要的相關檔案引用,可以在裡面自由加減需要的檔案,如jquery.form.js,Bower配置管理器也會自動幫我們在github上下載相關檔案,下載後的檔案也將放在wwwroot資料夾中。這些改變在專案的“依賴項”上都能直觀檢視。
Tips:每個專案中只能有一個bower.json配置檔案,對於bower.json的詳細資訊請參見Bower —— 管理你的客戶端依賴關係
1.2.7 appsettings
同樣是顧名思義——應用配置,類似於.NET Framework上的Web.Config檔案,開發者可以將系統引數通過鍵值對的方式寫在appsettings檔案中(如程式的連線字串),而Startup類中也在構造器中通過如下程式碼使得程式能夠識別該檔案
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();