将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目

迁移Net项目为Net Core\Standard项目

背景
我们公司内部有自己ORM开发框架,最新因为需要将系统迁移到国产服务器上,所以首先需要将最基础的ORM框架改造可以运行在国产服务器上。对于我们Net来说,优选Net Core。在迁移的过程中,将一些经验和坑记录下来,帮助自己记忆同时也给有同样需求的Net朋友一些帮助。

原始项目 Beyonbit.Framework 预览

image
看上图的当前项目,为我们的ORM框架。本次迁移主要将Beyondbit.Framework项目从Net Framework 3.5 迁移为 Net Core\Standard 2.0。

新建一个Net Standard 类库为Beyonbit.Framework

新建的步骤很简单,就不截图说明。

为什么创建一个项目,而不是将现在的项目升级

几点考虑:

  1. 当前类库是一个非常稳定的类库
  2. 这个类库是一个历史类库,有非常多的功能,并且我不知道所有的功能
  3. 在将这个类库升级成功前,这个类库需要继续提供给Net Framework 项目使用
  4. 类库升级成功后,很有可能比不稳定,在稳定的这段期间,依然需要稳定的类库给Net Framework 使用
  5. 为什么不重新复制一份代码,在这个复制的代码上改造?当然首先我会建立一个分支。同时,基于以上原因,我希望的是同一份代码可以编译出Net Framework和Net Core\Standard类库

可以看看微软的建议《组织项目以支持 .NET Framework 和 .NET Core

Net Standard和Net Core的关系

简单来将 Net Standard就是以前微软的共享类库的升级版,dll可以运行在WPF、ASP.NET、WinFrom、Silverlight、UWP的类库。
而Net Core生成的类库,依然只能运行在NetCore运行时上。
这个了解共享类库的概念会很好理解,不了解的话,可以看看其他同学写的文章。
linezero同学的《.NET Core 2.0及.NET Standard 2.0
或微软的文章《.Net Core, .Net Framework, .Net standard library, Xamarin 之间关系

移植现有代码到Net Core上

项目创建好了,如何将现在的类文件迁移到新项目上呢。可能有以下方案:

  1. 把所有文件复制到新项目上
  2. 把所有文件用快捷方式的办法添加到新项目上

在迁移这方面可以看看凌晨三点半同学的文章《迁移.net framework 工程到.net core》和《度量.net framework 迁移到.net core的工作量

不过我的做法和凌晨三点半同学的不一样。我是在参看log4net的开源代码时,看到的思路,借鉴了这个更简单的方法。

使用文本编辑器打开新建项目的.csproj文件

我的项目内容如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>

在文件中添加一下代码:

   <ItemGroup>
    <Compile Include="..\..\Beyondbit.Framework\**\*.cs" />
  </ItemGroup>

这句代码的意思是,将Beyondbit.Framework目录下的所有文件和目录都用快捷方式包含到项目中。
效果如下:
image
可以看到新项目的文件和老项目的文件是一模一样的,并且图标可以看出是快捷方式添加的。

Build 当前项目

项目已经迁移OK了,我们可以Build一下项目,然后将所有错误消灭。
我的项目编译结果如下:
image

总共有60个错误。最后调整发现不止60个错误,当这60个错误处理后,再编译,产生了新的错误,加起来有100个错误左右。

总结
迁移第一步工作结束,后续第二部的工作是来消灭错误,第三部是迁移单元测试和集成测试项目,以及最终的多个平台运行的测试。

posted @ 2018-04-20 14:35  xakoy  阅读(7501)  评论(1编辑  收藏  举报