欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET项目迁移到.NET Core操作指南

程序员文章站 2022-03-20 08:28:50
这篇文章,汇集了大量优秀作者写的关于".NET迁移到.NET Core"资料文章以及微软官方教程文档。是我在迁移公司框架项目到.NET Core和.NET Standard时遇到的问题,并将相关资料整理成这篇文章。记录如何一步一步把项目迁移到.NET Core。 ......

 

为什么要从.net迁移到.net core... 1

      .net core提供的特性... 1

      .net core性能提升... 2

.net如何迁移到.net core... 4

      迁移工作量评估(api兼容性分析)... 4

      迁移方案制定... 4

      通过类名、命名空间,查询api的实现信息... 4

      类库项目、应用项目如何选择框架类型... 5

      迁移到.net core,但只运行在windows平台上... 6

      兼容.net core或.net standard api7

      迁移ef框架... 8

      修改为 asp.net core 风格的应用... 8

 

  这篇文章,汇集了大量优秀作者写的关于".net迁移到.net core"资料文章以及微软官方教程文档。是我在迁移公司框架项目到.net core.net standard时遇到的问题,并将相关资料整理成这篇文章。记录如何一步一步把项目迁移到.net core。

在此感谢这些革命前辈,填平的坑,走出的路……

 

为什么要从.net迁移到.net core

.net core提供的特性

1.开源、免费

2.轻量级、跨平台

3.组件化、模块化、ioc+nuget、中间件

4.高性能

5.统一了mvcwebapi编程模型

a) 比如:asp.net core mvc web api 继承同一个基类,提供可使用的api也一致化

b) 比如:旧asp.net时代,写全局filter需要针对mvc web api 分别编写代码,但在asp.net core,直接使用一套中间件代码即可

6.可测试性

7.微服务、容器化支持

8.标准化 .net api 规范- .net standard,整体架构如下图:

 

.net core性能提升

1.techempower机构

  techempower机构会定期对各语言主流的web框架做性能测试

  

2.博客园博主、微软mvp – 杨晓东,做的 “hello world”性能测试

asp.net core 1.1性能对比评测(asp.net,python,java,nodejs)

编号

对比方

系统环境

宿主环境

测试结果(qps

1

asp.net core vs asp.net core

windows

kestrel vs iis

45.6k vs 15.2k

2

asp.net core vs asp.net

windows

iis vs iis

15.2k vs 18.2k

3

asp.net core vs asp.net

windows

kestrel vs iis

45.6k vs 18.2k

4

asp.net core vs python django

linux

kestrel vs uwsgi

26.7k vs 1.57k

5

asp.net core vs java servlet

linux

kestrel vs tomcat

26.7k vs 18.3k

6-1

asp.net core vs nodejs express

linux

kestrel vs self host

26.7k vs 15.6k

6-2

asp.net core vs nodejs koa

linux

kestrel vs self host

26.7k vs 17.5

性能测试工具:

    微软出品:benchmarks

   

其他阅读:

    是什么优化让 .net core 2.0性能飙升?

    .net core 3中的性能提升(译文)

    java(11,12) 与 .net core(2.2,3.0)的性能对比测试

 

.net如何迁移到.net core

迁移工作量评估(api兼容性分析)

可移植性分析工具:.net portability analyzer

 【cli 版本】  【visual studio extension 版本】

  评估会给出类似如下报告:

.NET项目迁移到.NET Core操作指南

.NET项目迁移到.NET Core操作指南

 

  .net standard versions

 

迁移方案制定

微软官方《组织项目以支持 .net framework 和 .net core》文章中,有介绍两种迁移方案:

方案一、将现有项目和 .net core 项目合并为单个项目(多目标框架)

方案二、将现有项目和新的 .net core 项目分离(拷贝到新项目)

   

通过类名、命名空间,查询api的实现信息

迁移过程中,有类库命名空间被调整,nuget归属包被调整,具体类库在.net core哪个版本中被实现也不是很清楚,通过下面两个查询助手,即可解决这些问题。

1、

2、查询 net api 在各版本中实现

结果图如下:

.NET项目迁移到.NET Core操作指南

.NET项目迁移到.NET Core操作指南

 

类库项目、应用项目如何选择框架类型

1.如何组织一个同时面向多目标框架的 c# 项目解决方案

2..netstandard;.netcore;fx(.netframework)之间引用关系

.net standard 2.0中,我们使在 .net standard 库中通过一个兼容层去引用已有的 .net framework 的库成为可能。当然,这只对那些只使用了适用于 .net standard api .net framework 库有效。

fx引用.netcore:不通过

.netstandard引用.netcore:不通过

 

.netcore引用fx:通过

.netcore引用.netstandard:通过

.netstandard引用fx:通过

fx引用.netstandard:通过

 

具体参见:

  【译】介绍 .net standard -- 

  

.netstandard;.netcore;fx(.netframework)之间引用关系

3.项目支持多目标框架

如何调试多目标框架类库?

net standard/core项目使用条件判断输出多版本xml注释文档

.NET项目迁移到.NET Core操作指南

4.多目标框架*享代码方案

1、【首选】.net standard,需要目标sdk支持对应的 .net standard 版本。

2、共享项目。直接共享了源码,只要在目标项目中指定了条件编译符,那么源码便能针对各种不同的目标框架进行分别编译。

3、[add as link]使用链接共享 visual studio 中的代码文件

5.条件编译符号 (命名全大写)

指令: #if #elif #else #endif ||&&!

因为目标框架提供的api不相同。故必要时可添加条件编译符号以便支持不同的运行时版本。

微软有针对各个目标框架有预定义预处理器符号,vs编译时会自动识别到这些框架条件编译符号。

.net framework 4.5 --> net45

.net framework 4.6 --> net46

.net framework 4.6.1 --> net461

.net standard 1.0 --> netstandard1_0

.net standard 1.6 --> netstandard1_6

.netcoreapp 2.0 --> netcoreapp2_0

参考:

如何将条件编译符号(defineconstants)传递给msbuild

 

迁移到.net core,但只运行在windows平台上

使用 windows 兼容性包将代码移植到 .net core

如何:将 windows 窗体桌面应用程序移植到 .net core

如何:将 wpf 桌面应用移植到 .net core

 

兼容.net core.net standard api

迁移httphandler与httpmodule到 asp.net core 中间件

.net core 2.0 踩坑记录之configurationmanager

.net core/standard 2.0 编译时报“cs0579: duplicate 'assemblyfileversionattribute' attribute”错误

1.自动生成assemblyinfo的原理

2.解决方案:不自动创建 assemblyinfo 文件

asp.net core开发之httpcontext

.net core 使用jsonconvert替代javascriptserializer

asp.net core 中重复读取 request.body 的正确姿势

jsonrequestbehaviorcore中被移除的问题

1.[asp.net mvc]解决"若要允许 get请求,请将 jsonrequestbehavior 设置为allowget"

2.[asp.net core]core中不会抛出allowget异常,对于denyget则使用[httppost]代替

https://*.com/questions/8464677/why-is-jsonrequestbehavior-needed?r=searchresults

获取asp.net core中的web根路径和内容根路径(移除的mappath)

为什么我的会话状态在asp.net core中不工作了?

由于asp.net core 2.1中引入的cookie同意和非必要cookiegdpr功能引起。(gdpr,即general data protection regulation,《通用数据保护条例》)

 

asp.net4.5asp.net core*享cookies认证信息(加解密方式不一致问题)

   .net跨平台之旅:asp.net core从传统asp.net的cookie中读取用户登录信息

   开源方案:[git]idunno.cookiesharing

asp.net core如何获取客户端ip地址(被移除的servervariables对象)

asp.net corebuildmanager.getreferencedassembiles() 的替代方案

1appdomain.currentdomain.getassemblies()

2

  (可以正常注入使用,但是调试时会报filenotfoundexception

  .NET项目迁移到.NET Core操作指南

.net core 2.0迁移system.runtime.caching

 

迁移ef框架

【微软官方】从 ef6 到 ef core的迁移系列

【微软官方】ef core 版本升级迁移系列

 

修改为 asp.net core 风格的应用

  按照上面的方式修改api兼容性后,框架类库可以顺利迁移到.net core,编译通过,代码运行也正常。但是asp.net core风格的应用,其写法也是有很多变化的。具体参考下面文档:

将传统 asp.net 应用迁移到 .net core

【微软官方】asp.net 迁移到 asp.net core教程系列

【微软官方】asp.net core 版本升级迁移系列

 

  后续,我会再整理一篇 《asp.net core 学习教程》 资源汇总的文章,目的是有条理的汇总大量优秀的asp.net core知识点文章,方便大家学习和知识查找。

 

==============================================================================

over,谢谢查阅,觉得文章对你有收获,请多帮推荐。欢迎提供更好的资料信息。