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