1. 程式人生 > >ASP.NET Core 專案資料夾解讀新框架

ASP.NET Core 專案資料夾解讀新框架

引言

庖丁解牛:“始臣之解牛之時,所見無非牛者;三年之後,未嘗見全牛也。”

正文

首先貼出來專案資料夾的截圖:
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();

魚尾