建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消
发表于2020年06月02日 20:19:04 1215 2
直达本楼层的链接
楼主
显示全部楼层
.net core迁移实践-乐石NisMES鲲鹏适配

1 介绍

1.1 .NET Core 介绍

.NET Core.NET的跨平台版本,用于构建网站,服务和控制台应用程序。具有以下特性:

跨平台: 可在 WindowsmacOS Linux 操作系统上运行。

跨体系结构保持一致: 在多个体系结构(包括 x64x86 ARM)上以相同的行为运行代码。

兼容性: .NET Core 通过 .NET Standard .NET Framework兼容。

ASP.NET Core 是一个跨平台的高性能开源框架,用于生成基于云且连接 Internet 的新式应用程序。

.NET Core SDK包含.NET Core RuntimeASP.NET Core RuntimeDesktop Runtime,其中.NET Core RuntimeASP.NET Core Runtime均支持Linux ARM64,而Desktop Runtime仅支持Windows

Github地址:https://github.com/dotnet

1.2 NisMES介绍

    “乐石NisMES”系乐石团队在全面考察中国制造业发展状况的基础上,结合当前国内生产企业现状,自主研发设计的一套适应并满足智能制造信息化需求的整体解决方案。是基于准时制生产、柔性制造、全面质量管理、零库存、零故障等精益生产理念的MES系统。目前已在机械、电子、五金等离散制造行业及陶瓷行业的智能制造系统建设方面积累了丰富经验。帮助中国制造企业合理有效的解决制造业设备故障率高、生产周期长、产品质量低、库存过大这四个主要问题,通过各个模块下科学的管理模式和先进的信息化技术,提高企业的生产效率和市场竞争力,实现智能制造管理。

 

2 迁移概述

2.1 迁移分析

现状:

操作系统:windows server 2012

部署方式:IIS

应用框架:.NET Core 2.1

ORM框架:EF Core 2.1

数据库:Sql Server 2008 R2

缓存中间件:redis

分析:

操作系统:

考虑到使用许可问题以及鲲鹏cpu架构为ARM64V8,将操作系统由windows换成Ubuntu Server 18.04

部署方式:

.NET Core Ubuntu环境部署步骤较多,若直接安装,不方便之后的应用迁移,所以使用Docker作为部署方式。

应用框架:

查看dockerhubASP.NET Core Runtime 官方镜像,未找到 2.1版本的 linux arm64 镜像,而 3.1版本支持,ASP.NET Core Runtime将升级到3.1版本.

数据库:

Sql Server数据库换成 PostgreSQL

ORM框架:

考虑到 EF Core 2.1升级到3.1版本中断功能,以及EF Core本就支持Postgres等主流数据库,故暂时不升级。

2.2 迁移建议

ARM64支持.NET Core 3.1及以上版本,本文使用.NET Core 3.1版本;操作系统建议使用Ubuntu 18.04版本,后续所有的操作都是基于Ubuntu 18.04

表2-1 IIS迁移建议

组件

迁移建议

windows server 2012

Ubuntu Server 18.04 (ARM64V8)

.NET Core 2.1

.NET Core 3.1

EF Core 2.1

EF Core 2.1暂不变更

redis

Redis-暂不变更

SQL Server

Postgre SQL




2.3 迁移参考链接

ASP.NET Core 2.1 迁移到 2.2

https://docs.microsoft.com/zh-cn/aspnet/core/migration/21-to-22?view=aspnetcore-3.1&tabs=visual-studio

ASP.NET Core 2.2 迁移到3.0

https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio

ASP.NET Core 3.0 迁移到3.1

https://docs.microsoft.com/zh-cn/aspnet/core/migration/30-to-31?view=aspnetcore-3.1&tabs=visual-studio

.NetCore2.1项目升级到.NetCore3.1的一点记录

https://www.cnblogs.com/hunanzp/p/12508003.html

数据库架构迁移:使用EFCore的迁移功能

https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/migrations/?tabs=vs#create-a-migration

3 环境准备

3.1 操作系统

Ubuntu Server 18.04使用华为云鲲鹏镜像。

image.png

3.2 安装docker

请参照:https://www.huaweicloud.com/kunpeng/software/docker.html


 

4 NisMES 鲲鹏适配

4.1 应用框架升级到 .NET Core 3.1

4.1.1 项目文件调整(.csproj)

目标框架 改为 .NET Core 3.1

移除包 Microsoft.AspNetCore.App 的引用,这个会默认包含在框架中

添加包 Microsoft.AspNetCore.Mvc.NewtonsoftJson 的引用

注: .NET Core 3.0 已经从共享框架中删除了Newtonsoft.Json,并引入System.Text.Json 类库并作为默认JSON序列化包,为兼容已有功能需要引入Microsoft.AspNetCore.Mvc.NewtonsoftJson包。

4.1.2 Program.cs 文件调整

IWebHostBuilder 改为IHostBuilder

Web 服务器的启动代码放到 ConfigureWebHostDefaults

image.png

4.1.3 Startup.cs 文件调整

ConfigureServices方法修改

image.png

Configure方法修改

IHostingEnvironment 改为IWebHostEnvironment

 image.png

参照:https://www.cnblogs.com/sanshi/p/11640318.html

4.2 数据库迁移

4.2.1 Docker中安装postgres

参照镜像说明

4.2.2 数据库架构迁移

使用EFCore的迁移功能

n  模型项目引入EFCore、Postgre相关的包

image.png

n  DbContext数据库访问上下文类中指定的连接的数据库类型、连接字符串、包含一个无参构造函数,其他模式见 Design-time DbContext Creation

image.png

n  执行Add-Migration命令,根据已定义的模型类(CodeFirst模式)生成db创建脚本

image.png

n  执行Update-Database命令,根据db创建脚本创建数据库

image.png

image.png

image.png

4.2.3 迁移sqlserver中的数据到postgres

使用工具navicat

4.3 安装redis

参照镜像说明

4.4 发布程序

n  VS发布程序到本地目录

n  使用WinSCP上传程序文件到Ubuntu服务器

image.png

 

n  构建镜像

image.png

n  运行容器

image.png


 

5 问题解决

1、 数据库中字母大小写问题:

Postgres区分大小写,SqlServer不区分大小写,代码中应注意区分大小写,否则可能有查不到数据的问题;

2、 日期时间显示错误问题:

Docker容器中时区与宿主机不一致,dockerfile中要指定时区Asia/Shanghai,否则显示的日期时间可能不正确;

3、 文件路径问题:

linux中路径分割符为 / windows中路径分割符为 \,涉及路径拼接时不要直接使用/\符号,而是使用 Path.Combine方法,否则可能会有找不到文件的问题;

4、 迁移数据架构时实体上注解问题:

实体上的形如 [Column(TypeName = "decimal(18, 6)")] 这种注解应去除,否则生成数据库表结构时可能失败(不同数据库类型可能不同);


举报
分享

分享文章到朋友圈

分享文章到微博
发表于2020年06月04日 10:43:27
直达本楼层的链接
沙发
显示全部楼层

收藏~

点赞 评论 引用 举报

火灵

发帖: 172粉丝: 11

发消息 + 关注

发表于2020年06月12日 22:54:56
直达本楼层的链接
板凳
显示全部楼层

厉害!还很实用!

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册