ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  ASP.NET Core是微软新推出支持跨平台、高性能、开源的开发框架,相比起原有的ASP.NET来说,ASP.NET Core更适合开发现代应用程序,如跨平台、Dorker的支持、集成现代前端开发框架(如npm、bower、gulp等等)。另外相比ASP.NET它的性能更好,还内置了依赖注入等功能对开发方式进行了优化。但它们之间也有很多相同或相似的地方,如都使用C#进行开发、都提供了MVC、Entity Framework、Identity等组件来快速构建应用程序。

  本文将通过迁移一个简单的ASP.NET应用为例,来介绍ASP.NET与ASP.NET Core之间的异同,其主要内容有:
  ●
  ●
  ●
    ○
    ○
  ●
    ○
    ○
    ○ 
    ○
    ○
  ●

  注:本文使用的VS2017为15.6.4版本,.Net Core SDK版本为2.1.103。

.Net Core & ASP.NET Core & .Net Standard

  在介绍如何迁移ASP.NET应用之前,先了解一下新框架.Net Core和ASP.NET Core,.Net Core是一个全新开发平台,新的运行时、SDK、类库、工具(编译工具、项目模板生成工具等等),而ASP.NET Core则是基于.Net Core的一个Web应用开发框架,它们的关系实际上与.Net Framework和ASP.NET是一样的。
  但是在使用.Net开发的时候出现了一个新的名词.Net Standard,.Net Standard是一个可用于所有.Net程序的API标准,换句话说就是如果使用.Net开发的API(类库)符合.Net Standard,那么该类库将可以用于所有的.Net应用。如下表所示,如果开发的类库是以.Net Standard2.0标准开发的,那么该类库将可应用到.Net Core2.0、.Net Framework4.6.1(需要.NET Core2.0的SDK支持)、Mono5.4、Xamarin、UWP等平台的应用上。

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  更多关于.Net Standard的内容可参考文档:https://docs.microsoft.com/en-us/dotnet/standard/net-standard

ASP.NET应用迁移分析

  .Net Core虽然是一个全新的开发平台(新运行时、新SDK、新类库、新工具),但是它毕竟是以.Net Framework为基础,所以对于部分API来说它仍然是参照且兼容.Net Framework的,所以在迁移.Net Core应用时可以先对代码进行分析。
  1、使用工具分析代码:
  有一个名为.Net Portability Analyzer的工具专门用于分析代码和引用程序集在.Net不同平台上的支持情况,该工具可以在VS的拓展管理中搜索并安装,或者到页面上下载VS插件双击安装(https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer):

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  安装完成后在VS的解决方案窗口中右键解决方案或者项目就可以看到下图两个菜单项,分别用于分析程序集的可移植性和对移植分析器的配置:

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  移植分析器的配置主要是对目标平台和报表输出类型进行配置:

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  下图是对My Blog应用进行可移植性分析的Excel报表(部分):
  可移植性总结:

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  问题细节:

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  缺失的程序集:

  

ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

  注:没找到更多关于缺少程序集的解释,不确定是无法解析还是无兼容性,本文暂时将这些程序集理解为仅支持.Net Framework平台。
  从分析报告中可以看出,除了MVC项目,其它类库项目与.Net Core或者.Net standard标准的兼容程度均为100%。
  2、根据实际情况对项目引用进行分析:
  工具对代码的分析仅可参考,毕竟使用.Net Framework开发的应用可能引用了很多第三方类库,这些类库可能不支持其它平台,有些类库可能支持,但是对于原有版本有了很多Break Changes,使用方法与原先不一致了,所以在进行代码迁移之前对项目引用进行分析,从技术上分析代码迁移是否可行。
  本例中仓储的实现依赖了Entity Framework、EF MySQL、Autofac、Identity等组件,这些组件在.Net Core下也是有相应实现,虽然API会有改动,但技术上是没有问题的可以迁移。接下来就开始介绍如何完成迁移。

类库项目迁移

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfgyj.html