.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,也需要进行相应的修改。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ken的杂谈

.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

1141
来自专栏木宛城主

厚积薄发,拥抱 .NET 2016

厚积薄发这个词是高三英语老师在高考前写在黑板上,高中三年努力这么久,是时候迎面而上,冲刺向前。所以,一想到.NET 2016,脑海里蹦出的第一个词就是它。 ....

41715
来自专栏ASP.NETCore

在ASP.NET Core下使用SignalR技术

  上次我们讲到过如何在ASP.NET Core中使用WebSocket,没有阅读过的朋友请参考 WebSocket in ASP.NET Core 文章 。这...

1392
来自专栏ASP.NETCore

ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninjec...

1174
来自专栏张善友的专栏

Json.NET 3.0

Json.NET,提供相当完整的文档之外,还提供了 LINQ to JSON 的 LINQ Provider 可以更方便的读取JSON 对象,今后将可比以往用更...

1986
来自专栏张善友的专栏

ASP.NET MVC 2 转换工具

似水流年报告了ASP.NET MVC 2 正式发布,那么我们有许多ASP.NET MVC 1.0的程序需要移植到2.0怎么办呢?Eilon Lipton 已经发...

1909
来自专栏张善友的专栏

Wix 3.0支持Windows Installer 5.0

 Windows Vista 和SP 1, Windows XP SP3, Windows Server 2008 RTM/SP1, Windows Serve...

2078
来自专栏葡萄城控件技术团队

Silverlight 结构分析

Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体...

1938
来自专栏张善友的专栏

使用MonoDevelop开发跨平台的应用程序

Mono®项目在3月31日发布了Mono2.4和MonoDevelop 2.0版本,2009年6月3日Lluis 在博客上宣布了MonoDevelop是一个完全...

2085
来自专栏张善友的专栏

ASP.NET MVC 2的代码以MS-PL协议开源发布

微软已经宣布ASP.NET MVC 2的代码以MS-PL协议发布,MS-PL是一个得到OSI认证的开源协议,ASP.NET MVC基于MS-PL发布,是一个真正...

1806

扫码关注云+社区

领取腾讯云代金券