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. P 算法与 K 算法

    P 算法与 K 算法 作者:Grey 原文地址: 博客园:P 算法与 K 算法 CSDN:P 算法与 K 算法 说明 P 算法和 K 算法主要用来解决最小生成树问题,即:不破坏连通性删掉某些边,使得整 ...

  2. NLP之基于Bi-LSTM和注意力机制的文本情感分类

    Bi-LSTM(Attention) @ 目录 Bi-LSTM(Attention) 1.理论 1.1 文本分类和预测(翻译) 1.2 注意力模型 1.2.1 Attention模型 1.2.2 Bi ...

  3. Java多线程(5):CAS

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 在JDK1.5之前,Java的多线程都是靠synchronized来保证同步的,这会引起很多性能问题,例如死锁.但随着Java的不断完善,JNI ...

  4. Centos镜像下载

    1.进入官网,并点击下图所示的红框(alternative downloads) 官网网址:https://www.centos.org/download/  2.在往下翻,可以看到如下图的历史版本, ...

  5. Codeforces Round #805 (Div. 3)E.Split Into Two Sets

    题目链接:https://codeforces.ml/contest/1702/problem/E 题目大意: 每张牌上面有两个数字,现在有n张牌(n为偶数),问能否将这n张牌分成两堆,使得每堆牌中的 ...

  6. RabbitMQ GUI客户端工具(RabbitMQ Assistant)

    RabbitMQ GUI客户端工具(RabbitMQ Assistant) 平时用控制台或者网页进行管理不免有点不方便,尤其在读取消息的时候不支持过滤和批量发送消息,在此推荐一个漂亮的GUI客户端工具 ...

  7. 推荐三个实用的 Go 开发工具

    孙悟空在花果山称王的时候,特意去了一趟东海,在那里淘到了如意金箍棒.因为身为一个山大王,怎么能没有一件趁手的兵器呢? 作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的 ...

  8. Dubbo-Activate实现原理

    前言 在Dubbo中有Filter使用,对于Filter来说我们会遇到这样的问题,Filter自身有很多的实现,我们希望某种条件下使用A实现,另外情况下使用B实现,这个时候我们前面介绍@SPI和@Ad ...

  9. 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述

    目标检测20年综述(2019) 摘要 Abstract 该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪.包括目标检测历史上的里程碑检测器.数据集.衡量指标.基本搭建模块.加速技术,最近的s ...

  10. C++初阶(stack+queue)

    stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈.stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其 ...