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 项目示例(增删改查).
随机推荐
- 齐博x1第四季《模块插件的制作》系列21-公共表单器的参数选项(7)
password 密码类型 和text一样,只不过type类型是password,密码类型输入时,显示星号.即Html中的密码框类型 icon 字体图标类型 和列表页一样,把css的字体图标引入到了表 ...
- 齐博x1小程序集群一个重要功能升级,可以根据圈子会员组显示不同的菜单。
如下图所示,虽然之前圈子小程序可以自定义会员中心菜单,但是存在一个问题,就是所有会员,比如圈主与普通会员的菜单都将是一样的. 现在升级后,就可以设置不同的圈子会员组,拥有不同的菜单. 比如一个商家,店 ...
- .NET6打包部署到Windows Service
1.安装Nuget包 安装以下nuget包支持windows service <PackageReference Include="Microsoft.AspNetCore.Hosti ...
- v-debounce-throttle是一个vue防抖节流指令
v-debounce-throttle是一个vue防抖节流指令 简介 v-debounce-throttle是一个vue防抖节流指令,控制单一事件的触发频率.其核心是拦截组件元素的v-on绑定事件,采 ...
- 【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)
前言 上一篇博客给大家介绍了LabVIEW开放神经网络交互工具包[ONNX],今天我们就一起来看一下如何使用LabVIEW开放神经网络交互工具包实现TensorRT加速YOLOv5. 以下是YOLOv ...
- HTTP(s) API 经验总结
目录 参考文章 First URL HTTP(s)-Header 请求方式 参考文章 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overvie ...
- vue 数组更新(push【可用】,$set,slice,filter,map【都属于浅拷贝】)问题
this.$axios.post('https://....php',this.$qs.stringify({ user: 'suess' })) .then(res => { this.dat ...
- 造个Python轮子,实现根据Excel生成Model和数据导入脚本
前言 最近遇到一个需求,有几十个Excel,每个的字段都不一样,然后都差不多是第一行是表头,后面几千上万的数据,需要把这些Excel中的数据全都加入某个已经上线的Django项目 这就需要每个Exce ...
- 给ofo共享单车撸一个微信小程序
想学一下微信小程序,发现文档这东西,干看真没啥意思.所以打算自己先动手撸一个.摩拜单车有自己的小程序,基本功能都有,方便又小巧,甚是喜爱.于是我就萌生了一个给ofo共享单车撸一个小程序(不知道为啥of ...
- selenium被某些网页检测不允许正常访问、登录等,解决办法
网站通过什么方式检测 function b() { return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver } 通过上方的 ...