title: Asp.Net Webapi项目从Framework 4.5升级到.Net 6的总结
date: 2022-10-06 14:31:36
tags:
- .NET

前言

目前手头上有个项目是Framework4.5.2版本的,实在是太老了,以至于github上很多好的开源库都用不上,同时Asp.Net版本的webapi和Core版本后的webapi各方面的差异比较大,比如IOC、AOP、管道等等,个人认为用Core版本的开发更加方便、更现代化,当然也有可能是我对Core比较熟悉,而对老版本的webapi不熟,不管怎么样,从framework升级到core还是很有必要的。

整个迁移过程总共用时1周,由于部分功能需要依赖Solidworks、UG,而这些软件的dll都是framework版本的,所以没办法把所有项目都升级到core,有个控制台的模块还是需要用framework,这个模块引用的其他通用的库也必须是Framework的,因此最后整个项目其实是framework+core混合用的,项目的架构这里就不放上来了,简单列举一下目前项目的主要模块:

  1. Webapi:后台服务,升级了.Net 6
  2. Worker Service:后台服务2,升级了.Net 6
  3. Console App:控制台应用 从Framework4.5升级到4.8
  4. 其他公共库,比如Service、Repository、Model、Utility、Core等库,如果ConsoleApp会调用的,则还是使用Framework,其他一律都使用.Net 6版本

下面总结一下整个升级过程中需要注意的地方

如果项目中依赖的第三方库都可以升级到core,那么自己的项目其实也可以都升级到core,然后再重新依赖core版本的第三方库,这样就简单很多了,不用趟那些兼容问题的坑

注意事项

Framework和.Net Core和.Net Standard的对应关系

首先需要搞清楚的是.Net Framework、.Net Core、.Net Standard三者的关系,简单来说.Net Standard相当于一个Interface(标准化的接口),而Framework和Core都是对这个接口的实现。不过,Framework 4.6.1以上只支持到了.Net Standard2.0,而.Net Standard 2.1以后,就只剩下.Net Core3、3.1和后面的.Net 5、6、7了。

以上知识点在我们安装一些第三方库的时候用得上,比如我们在nuget上想安装一个库,一般这个库会指明依赖的是大于.Net Standard X版本,如果X是2.0,那说明Framework的高版本还是能装上的,如果是X是2.1,那说明只能是Core版本才能用

具体的版本对应参考:.Net Core、Framework、Standard版本对应文档

Framework和Core之间不兼容的地方

在.Net Core 2.0(也就是.Net Standard 2.0)版本之前是没办法在Core项目中引用Framework的dll的( Framework的系统库是来自mscorlib ,Core的库是来自System.Runtime),但是在.Net Core 2.0之后是可以的,不过虽然可以保证编译通过,但是如果在Framework的dll中使用了一些Core中无法使用的函数或功能,那么就会出现运行时错误,关于具体不兼容的部分,可以参考下面的链接:

  1. Framework和Core的不兼容部分说明

当然,还有Framework中如果使用了一些特定于Windows平台的函数或库,也会出现运行时错误,这时候就需要安装一些兼容的库:

https://www.nuget.org/packages/Microsoft.Windows.Compatibility

不过这样做之后就只能在windows上运行了

dotnet cli和msbuild的区别

dotnet climsbuild可以看做基本一样,因为dotnet cli内部调用的是msbuild,不过还是有一些小的区别,可以看下面这篇文章:

Relationship between the dotnet cli and the new vs2017 msbuild

nuget restore和dotnet restore的区别

nuget restoredotnet restore基本上一样,都执行nuget还原操作,区别在于:

  • dotnet restore调用的是dotnet msbuild /t:Restore,这个命令只认识解决方案中的PackageReferencepackages.config文件引用的库使用dotnet climsbuild都还原不了

package.config是一些旧的项目才会用到的东西,现在都是用PackageReference模式了,如果不想使用nuget cli去还原包,也可以在项目内把package.config转换成PackageReference形式

参考链接

  1. Relationship between the dotnet cli and the new vs2017 msbuild
  2. 'dotnet restore' vs. 'nuget restore' with TeamCity
  3. What's the difference between using dotnet and MSBuild for building .NET applications?
  4. .Net Core、Framework、Standard版本对应文档
  5. Framework和Core的不兼容部分说明

Asp-Net-Webapi项目从Framework-4-5升级到-Net-6的总结的更多相关文章

  1. Asp.net WebApi 项目示例(增删改查)

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  2. Asp.Net WebApi 项目及依赖整理

    一.目前版本 Microsoft ASP.NET Web API 2.2 对应程序集版本5.2.3 二.默认生成的配置文件中的内容 <packages> <package id=&q ...

  3. Asp.Net Core 项目从 1.0.1 升级到 1.1.0 的小补丁

    还有 25 天就要交期末作业了,虽然还有好些功能没完成,但是前端同学还是建议先放到云上跑一跑,于是我轻车熟路的用 VS 2017 搞起了 FTP 发布,然而,发布失败了,错误信息如下: "D ...

  4. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  5. Asp.Net WebApi核心对象解析(一)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  6. Asp.Net WebAPI的简介及创建

    一.WebAPI简介 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET F ...

  7. OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...

  8. 让Asp.Net WebAPI支持OData查询,排序,过滤。

    让Asp.Net WebAPI支持OData后,就能支持在url中直接输入排序,过滤条件了. 一.创建Asp.Net WebAPI项目: 二.使用NuGet安装Asp.Net WebAPI 2.2和O ...

  9. Using ASP.Net WebAPI with Web Forms

    Asp.Net WebAPI is a framework for building RESTful HTTP services which can be used across a wide ran ...

  10. 推荐Asp.net WebApi入门教程

    Web API 强势入门指南; Web API 入门指南 - 闲话安全; 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通; Asp.net WebApi 项目示例(增删改查).

随机推荐

  1. 第三方库openPyxl读取excel文件

    import openpyxl from openpyxl.worksheet.worksheet import Worksheet def openpyxl_read(): #1.打开文件 work ...

  2. NLP之基于Seq2Seq和注意力机制的句子翻译

    Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...

  3. 基于 Redis 生成分布式订单号

    环境依赖: //spingBoot <version>2.6.6</version> //jdk11 <dependency> <groupId>org ...

  4. day10-Tomcat02

    Tomcat02 4.IDEA开发JavaWeb工程 4.1开发javaweb工程&配置Tomcat&启动项目 需求:使用idea开发javaweb工程fishWeb,并将网页部署到f ...

  5. [CS61A] Lecture 1&2&3. Introduction&Functions&Control

    [CS61A] Lecture 1&2&3. Introduction&Functions&Control 前言 CS61A是加州大学伯克利分校一门计算机专业课程,用于 ...

  6. K8s 生产最佳实践-限制 NameSpace 资源用量

    前言 想象一下这个场景:多个系统运行在同一套 K8s 集群上,有重要系统,也有不太重要的系统.但是某一天,某个不重要的系统突然占用了该 K8s 集群的所有资源,导致该集群上的其他系统的正常运行受到影响 ...

  7. Kubernetes介绍和资源管理

    Kubernetes介绍和资源管理 Kubernetes介绍 官网:https://kubernetes.io/ 一.应用部署方式演变 1.传统部署:互联网早期,会直接将应用程序部署在物理机上 优点: ...

  8. c#入参使用引用类型为啥要加ref?

    摘一段来自官网的说明 :方法的参数列表中使用 ref 关键字时,它指示参数按引用传递,而非按值传递. ref 关键字让形参成为实参的别名,这必须是变量. 换而言之,对形参执行的任何操作都是对实参执行的 ...

  9. windows安装wsl,在windows中使用ubuntu

    WSL(Windows Subsystem for Linux)即适用于 Linux 的 Windows 子系统,它是随 Windows 操作系统一起提供. WSL是windows操作系统的子系统,算 ...

  10. Linux 交叉编译使用代码覆盖GCOV及LCOV

    1. GCOV GCOV是GCC自带的代码覆盖工具,GCOV. 在 GCC 编译的时加入特殊的编译选项,生成可执行文件,和 *.gcno: 运行(测试)生成的可执行文件,生成了 *.gcda 数据文件 ...