1. 程式人生 > >Net Core 2.0生態1

Net Core 2.0生態1

spn get xamarin 程序 doc shtml -a 讓我 andro

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的架構體系,本系列相關文章:

  1. .Net Core 2.0 生態(1).NET Standard 2.0 特性介紹和使用指南(已發布)
  2. .Net Core 2.0 生態(2).NET Core 2.0 特性介紹和使用指南(已發布)
  3. .Net Core 2.0 生態(3)ASP.NET Core 2.0 特性介紹和使用指南(已發布)
  4. .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