.NET Core 2.0發布了

.NET Core 2.0

長久以來,.NET框架一直因為只能在Windows系統上運行而被人黑。所以微軟重寫了一個跨平臺的.NET,這就是.NET Core。現在.NET Core已經更新到2.0了。如果有興趣的話可以看看官方的更新日志。總之,所有使用.NET Core的同學, 最好都更新到最新版本,在性能、API實現、命令友好度方面都有改進。

Visual Studio 2017 15.3+

相應的,Visual Studio 2017也更新了,詳細更新情況請看更新日志,這個有中文版的,很良心。如果希望在新VS中使用.NET Core 2.0,還需要安裝單獨的.NET Core 2.0 SDK,安裝完成之后,VS才會識別到新的.NET Core 2.0 SDK。

Entity Framework Core 2.0

微軟的ORM框架Entity Framework也得到了更新,這里是官方的更新日志。在Entity Framework Core 2.0中,帶來了一些我認為很實用的更新。

.NET Standard 2.0支持

現在EF Core 2.0也支持了.NET Standard 2.0。這意味將來我們可以在.NET Framework、Mono、Xamarin、UWP等多種平臺上使用一致的API。

改進的LINQ翻譯

舉個例子,下面的LINQ會被翻譯成對應的LIKE查詢語句。

var customers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%");
    select c;

對應的查詢語句如下。

SELECT [c].[Id], [c].[Name]
FROM [Customers] AS [c]
WHERE [c].[Name] LIKE N'a%';

原生SQL中的字符串互操作

這是我認為很實用的一個特性。

var city = "Redmond";

using (var context = CreateContext())
{
    context.Customers.FromSql($@"
        SELECT *
        FROM Customers
        WHERE City = {city}");
}

還有一些特性我沒介紹,直接看官方更新日志吧。

ASP.NET Core 2.0

ASP.NET Core 2.0 的詳細更新情況,請看官方博客

Razor Pages

在新版本中引入了一種新的技術 Razor Pages,它在某些更側重編寫頁面的場景中有良好的應用。如果項目中啟用了MVC的話,那么Razor Pages也自動啟用了。

請看官方的例子,下面是一個Razor Pages,它和普通的Razor語法的MVC視圖頁面很相似,只不過頂部使用@page指令標識這是一個單獨的Razor Pages。

@page

<html>
    <body>
        <h2>The server-local time now is:</h2>

        <p>@DateTime.Now</p>
    </body>
</html>

在Razor Pages中也可以添加函數。

@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,利用到MVVM模式的優勢。詳細情況可以參考官方文檔,這里不再贅述。

除了Razor Pages,新版本還更新了新的項目模板,DbContext的緩沖池,以及不需要改動代碼的Application Insights監測。詳情請參考官方文檔。

從1.1升級到2.0

我自己也做了一個ASP.NET Core小程序玩玩,正好借這個機會升級到2.0 ,這里參考了官方的遷移指南。在遷移之前,確保正確安裝了.NET Core 2.0 。

更新目標框架

首先先升級目標框架,這需要修改csproj文件。如果原來項目的目標框架是.NET Core ,那么將其升級為netcoreapp2.0

<TargetFramework>netcoreapp2.0</TargetFramework>

如果原來項目的目標框架是.NET Framework,那么將其指定為大于等于.NET Framework 4.6.1的版本,例如net461

<TargetFramework>net461</TargetFramework>

更新項目引用

這里也需要根據項目的目標框架進行修改。這里我原來項目中的依賴包引用是這樣的。

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />
  </ItemGroup>

如果目標框架是.NET Core,那么把這些替換成一個單獨的元包即可。

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
</ItemGroup>

如果目標框架是.NET Framework,那么這些依賴包不能修改,但是所有版本都應該修改為2.0.

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
  <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.0" />
  <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="2.0.0" />
  <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.0.0" />
  <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
  <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />
  <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" PrivateAssets="All" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
  <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
  <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
</ItemGroup>

更新命令行工具版本

csproj文件中所有<DotNetCliToolReference />節點的version屬性更新到2.0.0,例如下面。

<ItemGroup>
  <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
  <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
  <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>

重命名Package Target Fallback屬性

PackageTargetFallback節點和值修改為AssetTargetFallback節點和屬性。

<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>

下面是修改之后的。

<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

更新Program.cs中的主方法

主方法可以簡化為以下的。

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的權限/認證 API,也需要進行相應的修改。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容