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


    迁移Net项目为Net CoreStandard项目

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

    原始项目 Beyonbit.Framework 预览

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

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

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

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

    几点考虑:

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

    可以看看微软的建议《组织项目以支持 .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个错误左右。

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

  • 相关阅读:
    C# String 前面不足位数补零的方法
    bootstrap-wysiwyg这个坑
    PRECONDITION_FAILED
    JdbcTemplate in()传参
    Mysql Specified key was too long; max key length is 767 bytes
    获取两日期之前集合并转为String类型的集合
    SQL里的concat() 以及group_concat() 函数的使用
    spring boot如何打印mybatis的执行sql
    MockMvc 进行 controller层单元测试 事务自动回滚 完整实例
    找到 Confluence 6 的日志和配置文件
  • 原文地址:https://www.cnblogs.com/xakoy/p/8880206.html
Copyright © 2020-2023  润新知