Asp-Net-Webapi项目从Framework-4-5升级到-Net-6的总结
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混合用的,项目的架构这里就不放上来了,简单列举一下目前项目的主要模块:
- Webapi:后台服务,升级了.Net 6
- Worker Service:后台服务2,升级了.Net 6
- Console App:控制台应用 从Framework4.5升级到4.8
- 其他公共库,比如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中无法使用的函数或功能,那么就会出现运行时错误,关于具体不兼容的部分,可以参考下面的链接:
当然,还有Framework中如果使用了一些特定于Windows平台的函数或库,也会出现运行时错误,这时候就需要安装一些兼容的库:
https://www.nuget.org/packages/Microsoft.Windows.Compatibility
不过这样做之后就只能在windows上运行了
dotnet cli和msbuild的区别
dotnet cli
和msbuild
可以看做基本一样,因为dotnet cli
内部调用的是msbuild
,不过还是有一些小的区别,可以看下面这篇文章:
Relationship between the dotnet cli and the new vs2017 msbuild
nuget restore和dotnet restore的区别
nuget restore
和dotnet restore
基本上一样,都执行nuget还原操作,区别在于:
dotnet restore
调用的是dotnet msbuild /t:Restore
,这个命令只认识解决方案中的PackageReference
而packages.config
文件引用的库使用dotnet cli
和msbuild
都还原不了
package.config
是一些旧的项目才会用到的东西,现在都是用PackageReference
模式了,如果不想使用nuget cli
去还原包,也可以在项目内把package.config
转换成PackageReference
形式
参考链接
- Relationship between the dotnet cli and the new vs2017 msbuild
- 'dotnet restore' vs. 'nuget restore' with TeamCity
- What's the difference between using dotnet and MSBuild for building .NET applications?
- .Net Core、Framework、Standard版本对应文档
- Framework和Core的不兼容部分说明
Asp-Net-Webapi项目从Framework-4-5升级到-Net-6的总结的更多相关文章
- Asp.net WebApi 项目示例(增删改查)
1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...
- Asp.Net WebApi 项目及依赖整理
一.目前版本 Microsoft ASP.NET Web API 2.2 对应程序集版本5.2.3 二.默认生成的配置文件中的内容 <packages> <package id=&q ...
- Asp.Net Core 项目从 1.0.1 升级到 1.1.0 的小补丁
还有 25 天就要交期末作业了,虽然还有好些功能没完成,但是前端同学还是建议先放到云上跑一跑,于是我轻车熟路的用 VS 2017 搞起了 FTP 发布,然而,发布失败了,错误信息如下: "D ...
- Asp.Net WebApi核心对象解析(上篇)
生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...
- Asp.Net WebApi核心对象解析(一)
生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...
- Asp.Net WebAPI的简介及创建
一.WebAPI简介 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET F ...
- 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 ...
- 让Asp.Net WebAPI支持OData查询,排序,过滤。
让Asp.Net WebAPI支持OData后,就能支持在url中直接输入排序,过滤条件了. 一.创建Asp.Net WebAPI项目: 二.使用NuGet安装Asp.Net WebAPI 2.2和O ...
- 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 ...
- 推荐Asp.net WebApi入门教程
Web API 强势入门指南; Web API 入门指南 - 闲话安全; 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通; Asp.net WebApi 项目示例(增删改查).
随机推荐
- 第三方库openPyxl读取excel文件
import openpyxl from openpyxl.worksheet.worksheet import Worksheet def openpyxl_read(): #1.打开文件 work ...
- NLP之基于Seq2Seq和注意力机制的句子翻译
Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...
- 基于 Redis 生成分布式订单号
环境依赖: //spingBoot <version>2.6.6</version> //jdk11 <dependency> <groupId>org ...
- day10-Tomcat02
Tomcat02 4.IDEA开发JavaWeb工程 4.1开发javaweb工程&配置Tomcat&启动项目 需求:使用idea开发javaweb工程fishWeb,并将网页部署到f ...
- [CS61A] Lecture 1&2&3. Introduction&Functions&Control
[CS61A] Lecture 1&2&3. Introduction&Functions&Control 前言 CS61A是加州大学伯克利分校一门计算机专业课程,用于 ...
- K8s 生产最佳实践-限制 NameSpace 资源用量
前言 想象一下这个场景:多个系统运行在同一套 K8s 集群上,有重要系统,也有不太重要的系统.但是某一天,某个不重要的系统突然占用了该 K8s 集群的所有资源,导致该集群上的其他系统的正常运行受到影响 ...
- Kubernetes介绍和资源管理
Kubernetes介绍和资源管理 Kubernetes介绍 官网:https://kubernetes.io/ 一.应用部署方式演变 1.传统部署:互联网早期,会直接将应用程序部署在物理机上 优点: ...
- c#入参使用引用类型为啥要加ref?
摘一段来自官网的说明 :方法的参数列表中使用 ref 关键字时,它指示参数按引用传递,而非按值传递. ref 关键字让形参成为实参的别名,这必须是变量. 换而言之,对形参执行的任何操作都是对实参执行的 ...
- windows安装wsl,在windows中使用ubuntu
WSL(Windows Subsystem for Linux)即适用于 Linux 的 Windows 子系统,它是随 Windows 操作系统一起提供. WSL是windows操作系统的子系统,算 ...
- Linux 交叉编译使用代码覆盖GCOV及LCOV
1. GCOV GCOV是GCC自带的代码覆盖工具,GCOV. 在 GCC 编译的时加入特殊的编译选项,生成可执行文件,和 *.gcno: 运行(测试)生成的可执行文件,生成了 *.gcda 数据文件 ...