ASP.NET Core 2.0 特性介绍和使用指南
ASP.NET Core 2.0 發(fā)布日期:2017年8月14日
ASP.NET團(tuán)隊(duì)宣布ASP.NET Core 2.0正式發(fā)布,發(fā)布Visual Studio 2017 15.3支持ASP.NET Core 2.0,提供新的Razor Pages項(xiàng)目模板。
詳細(xì)發(fā)布信息查看.NET Core 2.0.0發(fā)布說明文檔
最新版SDK下載:https://dot.net/core
ASP.NET Core 2.0提供一系列新功能使得Web應(yīng)用開發(fā)、發(fā)布、部署和維護(hù)變得更加容易,框架性能得到進(jìn)一步提升。
前言:答讀者問(time by:2017.8.19)
在開始之前先集中回復(fù)前兩篇文章評(píng)論中大家比較關(guān)注的問題
問題1:工具的更新問題
問題by @軒轅劍:有沒單獨(dú)升級(jí)到15.3的更新啊?
答案by @yyww:下載新版本的安裝程序,1M多,會(huì)自動(dòng)更新的
VS2017安裝程序經(jīng)過重構(gòu)變成模塊化安裝,所以對(duì)于15.3版本的更新是增量更新,下載最新的安裝程序,會(huì)自動(dòng)檢測(cè)。
Visual Studio For Mac 7.1也一樣,檢測(cè)軟件更新,進(jìn)行增量更新。
問題2:.NET Standard到底是什么?
問題by @wdwwtzy:這個(gè)系列不錯(cuò),想聽聽 standard 到底是啥,建議深入一些,現(xiàn)在太淺了
問題by @海闊天空XM:幾張?bào)w系結(jié)構(gòu)圖?
.NET Standard是一組API集合,支持.NET Standard的.NET平臺(tái)之間可以實(shí)現(xiàn)代碼共享,基于.NET Standard構(gòu)建的類庫可以在支持.NET Standard的.NET平臺(tái)進(jìn)行復(fù)用,防止代碼碎片化。
目前支持.NET Standard 2.0的平臺(tái)有:
.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 (預(yù)計(jì)2017年下半年發(fā)布)
在深入一點(diǎn),看這張圖
平臺(tái)對(duì).NET Standard 支持對(duì)應(yīng)表(by @農(nóng)碼一生)
【圖】
問題3:關(guān)于System.Drawing API是否提供?
問題by @PowerShell免費(fèi)軟件:.net core2正式版了,增加了System.Drawing。
有人在上面成功運(yùn)行以前的winform程序嗎?誰能幫忙搞個(gè)hello試試看嗎?
命名空間System.Drawing是增加了,只提供了結(jié)構(gòu)體,并沒有提供繪圖類,相信在接下來的版本會(huì)支持。
項(xiàng)目升級(jí)到ASP.NET Core 2.0
ASP.NET Core 2.0 可以同時(shí)運(yùn)行在.NET Framework 4.6.1?和?.NET Core 2.0框架,更改項(xiàng)目目標(biāo)框架為:netcoreapp2.0
<PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework></PropertyGroup>在Visual Stdio中可以設(shè)置項(xiàng)目屬性
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 883px; height: 176px;">
也可以手動(dòng)編輯項(xiàng)目文件,將原項(xiàng)目中Microsoft.AspNetCore.*引用包升級(jí)到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項(xiàng)目發(fā)布做了優(yōu)化,發(fā)布文件只包含引用的類庫。這個(gè)優(yōu)化有助于使發(fā)布過程更流暢,更容易分發(fā)Web應(yīng)用程序。
將 ASP.NET Core 1.0 升級(jí)到 2.0 詳細(xì)內(nèi)容可以參看這篇文章。
新增功能:Razor Pages介紹
ASP.NET Core 2.0中,提供一種新的編碼方式,這種方式在頁面邏輯集中的場(chǎng)景下比使用MVC架構(gòu)開發(fā)更加簡單。
Razor Pages是頁面優(yōu)先的架構(gòu),允許用戶開發(fā)界面時(shí),使用簡單的服務(wù)端交互方式,通過頁面模型對(duì)象(Page Model)進(jìn)行數(shù)據(jù)交互,而無需控制器中轉(zhuǎn)。
在項(xiàng)目啟動(dòng)文件中,添加代碼
public class Startup{ ??public void ConfigureServices(IServiceCollection services) ? ?{ ?
?? ? ?// 包含對(duì)Razor Pages 和控制器支持.services.AddMvc();} ?
?? ?public void Configure(IApplicationBuilder app) ? ?{app.UseMvc();} }
當(dāng)在服務(wù)注冊(cè)中調(diào)用AddMvc方法時(shí)會(huì)激活Razor Pages功能。
添加一個(gè)測(cè)試頁面,放在Pages目錄下,命名為Now.cshtml。
這看起來像是標(biāo)準(zhǔn)的Razor視圖,只是在頁面頂部添加標(biāo)記@page,就定義該頁面為獨(dú)立的Razor Page,在頁面中依然可以使用 HtmlHelpers, TagHelpers 或者.NET 代碼,可以像在Razor視圖中一樣定義方法,只需添加塊級(jí)元素@functions,然后在其內(nèi)部編寫代碼。
@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>結(jié)合使用PageModel對(duì)象,可以創(chuàng)建更加復(fù)雜的頁面交互,PageModel是一個(gè)MVVM架構(gòu)概念,相當(dāng)于視圖模型(VM),允許執(zhí)行方法并將屬性綁定到對(duì)應(yīng)的頁面中。在Pages目錄中創(chuàng)建一個(gè)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() { }} }
這個(gè)類繼承自PageModel,根據(jù)頁面業(yè)務(wù)需要可以構(gòu)建與頁面交互的邏輯類,并且可以對(duì)該類中的業(yè)務(wù)邏輯進(jìn)行單元測(cè)試。在本例中,將LastModified屬性加載到頁面。另外注意OnGet方法用來聲明PageModel可以響應(yīng)HTTP GET請(qǐng)求。
更新Razor Page,使用PageModel定義的LastModified屬性。
@page
@model MyFirstRazorPage.Pages.NowModel
更多Razor Pages詳細(xì)介紹參看資料。
回到目錄
模板更新
模板已經(jīng)增強(qiáng),不僅包含MVC模式的Web應(yīng)用程序模板,也包含Razor Pages Web應(yīng)用程序模板,還包含一系列單頁應(yīng)用(SPA)程序模板。這些單頁模板使用Javascript服務(wù)功能在ASP.NET Core服務(wù)中嵌入NodeJS,將JavaScript應(yīng)用程序服務(wù)器作為項(xiàng)目中的一部分進(jìn)行編譯。
命令行工具提供的內(nèi)置項(xiàng)目模板
Entity Framework Core 2.0提供DbContext池
參看:Entity Framework Core 2.0發(fā)布(稍后發(fā)布,會(huì)用單獨(dú)一篇文章總結(jié))
監(jiān)視器、無代碼更改配置、應(yīng)用程序監(jiān)視器
運(yùn)行在Azure應(yīng)用服務(wù)上的ASP.NET Core 2.0項(xiàng)目無需修改,提供性能分析、錯(cuò)誤報(bào)告和Azure應(yīng)用程序監(jiān)視功能。
在Visual Studio 2017中右鍵項(xiàng)目,Add->Application Insights Telemetry,啟動(dòng)應(yīng)用程序數(shù)據(jù)收集,然后可以直接預(yù)覽日志信息和應(yīng)用程序性能報(bào)告。
這個(gè)功能可以讓我們?cè)陂_發(fā)階段,對(duì)應(yīng)用程序性能做出測(cè)試和反饋,當(dāng)程序發(fā)布到Azure之后,可以在Azure門戶中進(jìn)行分析和調(diào)試,程序信息的收集從第一次發(fā)布應(yīng)用程序并導(dǎo)航到云門戶時(shí)開始。Azure將會(huì)以一個(gè)紫色橫幅提示您,這表明應(yīng)用程序監(jiān)視和分析功能是可用的。
點(diǎn)擊進(jìn)入查看應(yīng)用程序監(jiān)視服務(wù),無需重新編譯和部署,應(yīng)用程序監(jiān)視服務(wù)將開始報(bào)告捕獲到的活動(dòng)數(shù)據(jù)。
數(shù)據(jù)報(bào)告顯示了應(yīng)用程序中失敗的請(qǐng)求和錯(cuò)誤的數(shù)量。單擊關(guān)注的數(shù)據(jù)項(xiàng),將展示關(guān)于失敗請(qǐng)求的詳細(xì)信息:
上圖中拋出一個(gè)System.Exception,點(diǎn)擊查看異常報(bào)告,可以查看拋出異常的詳細(xì)信息,包括調(diào)用堆棧:
應(yīng)用程序監(jiān)視的快照調(diào)試現(xiàn)在支持ASP.NET Core 2.0應(yīng)用。如果設(shè)置在應(yīng)用程序中配置快照調(diào)試,則頂部的“打開調(diào)試快照”鏈接將顯示并顯示完整的調(diào)用堆棧,可以單擊堆棧中的方法來查看本地變量:
好了!我們可以更進(jìn)一步,點(diǎn)擊右上角的“下載快照”按鈕,在Visual Studio中啟動(dòng)一個(gè)異常調(diào)試會(huì)話。
這些頁面的性能如何?從應(yīng)用程序監(jiān)視頁面中,選擇左側(cè)的性能選項(xiàng),深入地研究每個(gè)請(qǐng)求在應(yīng)用程序的性能跟蹤。
更多信息參看使用應(yīng)用程序洞察的性能分析。
如果您想要使用您的應(yīng)用程序的原始日志,您可以在應(yīng)用程序服務(wù)中啟用診斷日志,并將診斷級(jí)別設(shè)置為警告或錯(cuò)誤,以查看該異常被拋出。
最后,選擇左邊的日志流,您可以看到您在開發(fā)人員工作站上所擁有的控制臺(tái)。選擇將在Azure中觸發(fā)的嚴(yán)重級(jí)別或更大級(jí)別的錯(cuò)誤和日志消息。
所有應(yīng)用程序感知功能都可以在 ASP.NET Core 中使用,不用重新編譯和部署。快照調(diào)試需要添加額外的步驟和一些代碼,而配置就像在啟動(dòng)類中添加額外代碼一樣簡單。
更新信息參看:應(yīng)用程序洞察在線文檔
Razor支持C# 7.1
Razor視圖引擎借助Roslyn編譯器支持C# 7.1功能,比如:默認(rèn)表達(dá)式、推斷的元組名稱和模式匹配泛型。要在項(xiàng)目中使用c# 7.1特性,在項(xiàng)目文件中添加以下屬性,然后重新加載解決方案:
<LangVersion>latest</LangVersion>C# 7.1本身還是預(yù)覽版狀態(tài),可以在其GitHub存儲(chǔ)庫中查看這些特性的語言規(guī)范。
簡化應(yīng)用程序的主機(jī)配置
主機(jī)配置已經(jīng)大大簡化,默認(rèn)ASP.NET Core項(xiàng)目模板中提供WebHost.CreateDefaultBuilder,自動(dòng)分配一個(gè)Kestrel服務(wù)器,如果IIS可用則嘗試運(yùn)行在IIS上,并配置標(biāo)準(zhǔn)控制臺(tái)日志提供程序。
public class Program{ ? ?? ? public static void Main(string[] args) ? ?{BuildWebHost(args).Run();} ?
? ? public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build(); }
總結(jié)
ASP.NET Core 2.0提供的一系列新功能提供編寫應(yīng)用程序的新方法,簡化了應(yīng)用程序在生產(chǎn)環(huán)境的管理和維護(hù)。
相關(guān)文章:?
.NET Core 2.0 正式發(fā)布信息匯總
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 的dll實(shí)時(shí)更新、https、依賴包變更問題及解決
.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 新特性
體驗(yàn) PHP under .NET Core
.NET Core 2.0使用NLog
升級(jí)項(xiàng)目到.NET Core 2.0,在Linux上安裝Docker,并成功部署
解決Visual Studio For Mac Restore失敗的問題
原文地址:http://www.cnblogs.com/vveiliang/p/7380260.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 2.0 特性介绍和使用指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net core 2.0学习笔记(一)
- 下一篇: ASP.NET Core 源码学习之 L