標籤:and 問題 效能分析 包含 表達 function 右上方 邏輯 研究
Net Core 2.0生態
閱讀目錄
- 前言:答讀者問(time by:2017.8.19)
- 項目升級到ASP.NET Core 2.0
- 新增功能:Razor Pages介紹
- 模板更新
- Entity Framework Core 2.0提供DbContext池
- 監視器、無代碼更改配置、應用程式監視器
- Razor支援C# 7.1
- 簡化應用程式的主機配置
- 總結
ASP.NET Core 2.0 發布日期:2017年8月14日
ASP.NET團隊宣布ASP.NET Core 2.0正式發布,發布Visual Studio 2017 15.3支援ASP.NET Core 2.0,提供新的Razor Pages項目模板。
詳細發布資訊查看.NET Core 2.0.0發布說明文檔
最新版SDK下載:https://dot.net/core
ASP.NET Core 2.0提供一系列新功能使得Web應用開發、發布、部署和維護變得更加容易,架構效能得到進一步提升。
對於.NET Core 2.0的發布介紹,圍繞2.0的架構體系,本系列相關文章:
- .Net Core 2.0 生態(1).NET Standard 2.0 特性介紹和使用指南(發行)
- .Net Core 2.0 生態(2).NET Core 2.0 特性介紹和使用指南(發行)
- .Net Core 2.0 生態(3)ASP.NET Core 2.0 特性介紹和使用指南(發行)
- .Net Core 2.0 生態(4)Entity Framework Core 2.0 特性介紹和使用指南(發行)
回到目錄前言:答讀者問(time by:2017.8.19)
在開始之前先集中回複前兩篇文章評論中大家比較關注的問題
- 問題1:工具的更新問題
問題by @軒轅劍:有沒單獨升級到15.3的更新啊?
答案by @yyww:下載新版本的安裝程式,1M多,會自動更新的
VS2017安裝程式經過重構變成模組化安裝,所以對於15.3版本的更新是累加式更新,下載最新的安裝程式,會自動檢測。
Visual Studio For Mac 7.1也一樣,檢測軟體更新,進行累加式更新。
- 問題2:.NET Standard到底是什嗎?
問題by @wdwwtzy:這個系列不錯,想聽聽 standard 到底是啥,建議深入一些,現在太淺了
問題by @海闊天空XM:幾張體繫結構圖?
.NET Standard是一組API集合,支援.NET Standard的.NET平台之間可以實現代碼共用,基於.NET Standard構建的類庫可以在支援.NET Standard的.NET平台進行複用,防止代碼片段化。
目前支援.NET Standard 2.0的平台有:
- .NET Framework 4.6.1
- .NET Core 2.0
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Mac 3.8
- Xamarin.Android 7.5
- UWP (預計2017年下半年發布)
在深入一點,看這張圖
平台對.NET Standard 支援對應表(by @農碼一生)
【圖】
- 問題3:關於System.Drawing API是否提供?
問題by @PowerShell免費軟體:.net core2正式版了,增加了System.Drawing。
有人在上面成功運行以前的winform程式嗎?誰能幫忙搞個hello試試看嗎?
命名空間System.Drawing是增加了,只提供了結構體,並沒有提供繪圖類,相信在接下來的版本會支援。
回到目錄項目升級到ASP.NET Core 2.0
ASP.NET Core 2.0 可以同時運行在.NET Framework 4.6.1
和 .NET Core 2.0
架構,更改項目目標框架為:netcoreapp2.0
<PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework></PropertyGroup>
在Visual Stdio中可以設定項目屬性
也可以手動編輯專案檔,將原項目中Microsoft.AspNetCore.*
引用包升級到2.0
<ItemGroup><PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /><PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" /><PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" /></ItemGroup>
ASP.NET Core 2.0項目發布做了最佳化,發布檔案只包含引用的類庫。這個最佳化有助於使發布過程更流暢,更容易分發Web應用程式。
將 ASP.NET Core 1.0 升級到 2.0 詳細內容可以參看這篇文章。
回到目錄新增功能:Razor Pages介紹
ASP.NET Core 2.0中,提供一種新的編碼方式,這種方式在頁面邏輯集中的情境下比使用MVC架構開發更加簡單。
Razor Pages是頁面優先的架構,允許使用者開發介面時,使用簡單的服務端互動方式,通過頁面模型對象(Page Model)進行資料互動,而無需控制器中轉。
在項目開機檔案中,添加代碼
public class Startup{ public void ConfigureServices(IServiceCollection services) { // 包含對Razor Pages 和控制器支援. services.AddMvc(); } public void Configure(IApplicationBuilder app) { app.UseMvc(); }}
當在服務註冊中調用AddMvc方法時會啟用Razor Pages功能。
添加一個測試頁面,放在Pages目錄下,命名為Now.cshtml
。
@page<html> <body> <h2>The server-local time now is:</h2> <p>@DateTime.Now</p> </body></html>
這看起來像是標準的Razor視圖,只是在頁面頂部委任標記@page
,就定義該頁面為獨立的Razor Page,在頁面中依然可以使用 HtmlHelpers, TagHelpers 或者.NET 代碼,可以像在Razor視圖中一樣定義方法,只需添加區塊層級元素@functions
,然後在其內部編寫代碼。
@page@functions {public string FormatDate(DateTime theTime) { return theTime.ToString("d");}}<html> <body> <h2>The server-local time now is:</h2> <p>@FormatDate(DateTime.Now)</p> </body></html>
結合使用PageModel對象,可以建立更加複雜的頁面互動,PageModel是一個MVVM架構概念,相當於視圖模型(VM),允許執行方法並將屬性綁定到對應的頁面中。在Pages目錄中建立一個NowModel.cshtml.cs
類。
namespace MyFirstRazorPage.Pages{public class NowModel : PageModel{ private IFileProvider _FileProvider; public NowModel(PhysicalFileProvider fileProvider) { _FileProvider = fileProvider; LastModified = _FileProvider.GetFileInfo("Pages/Now.cshtml").LastModified.LocalDateTime; } public DateTime LastModified { get; set; } public void OnGet() { }}}
這個類繼承自PageModel,根據頁面業務需要可以構建與頁面互動的邏輯類,並且可以對該類中的商務邏輯進行單元測試。在本例中,將LastModified屬性載入到頁面。另外注意OnGet
方法用來聲明PageModel可以響應HTTP GET請求。
更新Razor Page,使用PageModel定義的LastModified屬性。
@page
@model MyFirstRazorPage.Pages.NowModel
<html> <body> <h2>This page was last updated:</h2> <p>@Model.LastModified</p> </body></html>
更多Razor Pages詳細介紹參看資料。
回到目錄模板更新
模板已經增強,不僅包含MVC模式的Web應用程式模板,也包含Razor Pages Web應用程式模板,還包含一系列單頁應用(SPA)程式模板。這些單頁模板使用Javascript服務功能在ASP.NET Core服務中嵌入NodeJS,將JavaScript應用程式伺服器作為項目中的一部分進行編譯。
命令列工具提供的內建項目模板
回到目錄Entity Framework Core 2.0提供DbContext池
參看:Entity Framework Core 2.0發布(稍後發布,會用單獨一篇文章總結)
回到目錄監視器、無代碼更改配置、應用程式監視器
運行在Azure應用服務上的ASP.NET Core 2.0項目無需修改,提供效能分析、錯誤報表和Azure應用程式監視功能。
在Visual Studio 2017中右鍵項目,Add->Application Insights Telemetry,啟動應用程式資料收集,然後可以直接預覽日誌資訊和應用程式效能報告。
這個功能可以讓我們在開發階段,對應用程式效能做出測試和反饋,當程式發布到Azure之後,可以在Azure門戶中進行分析和調試,程式資訊的收集從第一次發布應用程式並導航到雲門戶時開始。Azure將會以一個紫色橫幅提示您,這表明應用程式監視和分析功能是可用的。
點擊進入查看應用程式監視服務,無需重新編譯和部署,應用程式監視服務將開始報告捕獲到的活動資料。
資料報告顯示了應用程式中失敗的請求和錯誤的數量。單擊關注的資料項目,將展示關於失敗請求的詳細資料:
中拋出一個System.Exception
,點擊查看異常報告,可以查看拋出異常的詳細資料,包括呼叫堆疊:
應用程式監視的快照調試現在支援ASP.NET Core 2.0應用。如果設定在應用程式中配置快照調試,則頂部的“開啟調試快照”連結將顯示並顯示完整的呼叫堆疊,可以單擊堆棧中的方法來查看本地變數:
好了!我們可以更進一步,點擊右上方的“下載快照”按鈕,在Visual Studio中啟動一個異常偵錯工作階段。
這些頁面的效能如何?從應用程式監視頁面中,選擇左側的效能選項,深入地研究每個請求在應用程式的效能跟蹤。
更多資訊參看使用應用程式洞察的效能分析。
如果您想要使用您的應用程式的原始日誌,您可以在應用程式服務中啟用診斷記錄,並將診斷層級設定為警告或錯誤,以查看該異常被拋出。
最後,選擇左邊的日誌流,您可以看到您在開發人員工作站上所擁有的控制台。選擇將在Azure中觸發的嚴重層級或更大層級的錯誤和日誌訊息。
所有應用程式感知功能都可以在 ASP.NET Core 中使用,不用重新編譯和部署。快照調試需要添加額外的步驟和一些代碼,而配置就像在啟動類中添加額外代碼一樣簡單。
更新資訊參看:應用程式洞察線上文檔
回到目錄Razor支援C# 7.1
Razor視圖引擎藉助Roslyn編譯器支援C# 7.1功能,比如:預設運算式、推斷的元組名稱和模式比對泛型。要在項目中使用c# 7.1特性,在專案檔中添加以下屬性,然後重新載入解決方案:
<LangVersion>latest</LangVersion>
C# 7.1本身還是預覽版狀態,可以在其GitHub存放庫中查看這些特性的語言規範。
回到目錄簡化應用程式的主機配置
主機配置已經大大簡化,預設ASP.NET Core項目模板中提供WebHost.CreateDefaultBuilder
,自動分配一個Kestrel伺服器,如果IIS可用則嘗試運行在IIS上,並配置標準控制台記錄提供者。
public class Program{ public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build();}
回到目錄總結
ASP.NET Core 2.0提供的一系列新功能提供編寫應用程式的新方法,簡化了應用程式在生產環境的管理和維護。
Net Core 2.0生態1