Net Core 2.0生態1
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