用 Visual Studio 升级 .NET 项目
现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些项目类型仍正在开发中并将在不久的未来推出,请参阅以下的详细信息。
为什么要升级?升级到哪个版本?
如果你的应用程序是为 .NET Framework 或 .NET Core 构建的,现在是将它们升级到 .NET 6(长期支持版本)或 .NET 7(标准期限支持版本)的好时机。.NET 6 和 .NET 7 具有更好的性能并能为你提供最新的特性和功能。.NET Framework 和最新的 .NET 之间已经有了巨大的改进,但即使你仍然在使用 .NET Core 3.1 或更早版本,它也已在 2022 年 12 月结束支持。
我们建议转移到 .NET 6 或 .NET 7!
.NET 6 和.NET 7 这两者相比,.NET 6 的支持时间更长,而 .NET 7 是最新的版本,因此具有更新的功能。我们每年 11 月都会发布新版本的 .NET,每个偶数版本的 .NET 都会有 3 年的支持时间(长期支持(Long Term Support),简称 LTS)。因此,你可以选择坚持每年升级确保你使用的都是最新的尖端技术,或者你可以选择每 2-3 年从上一个 LTS 切换到下一个 LTS。
关于升级助手
升级你的应用程序是一个复杂的过程,而从 .NET Framework 升级尤其复杂。我们在这方面不断地进行原型设计和改进以简化这一升级过程。过去,你可能使用过 Upgrade Assistant CLI 工具或 Microsoft Project Migrations。我们已经收到了你们的反馈,非常感谢大家为我们填写的调查问卷、评论、创建的问题和功能请求!通过大家的反馈,我们得出结论,我们需要为 Visual Studio 中的每个项目类型提供统一的升级体验。
现在,你可以在 Solution Explorer(解决方案资源管理器)中右键单击你的项目并选择“升级”,这样就可以让各种类型的 .NET 应用程序从任何初始版本(.NET Framework 或 .NET Core)升级。不要忘记先安装扩展包。
升级助手的一般理念是它会帮忙处理机制,但根据你要升级的框架和项目类型,你可能会需要进行一些手动的后期处理。虽然我们会努力尝试自动修复失败的变化,但它无法检测并修复所有的错误。因此,你可能需要进行一些额外的修改才能编译代码,同时你需要进行彻底的测试以确保你的代码能够继续照常工作。
支持的应用程序类型
我们的目标是支持每一种 .NET 项目类型。我们认为此工具不仅是从 .NET Framework 到 .NET 6/7 的一次性升级,同时也会是未来能够将你的应用程序升级到最新 .NET 的一种方式。除了更改目标框架版本外,该工具还能够修改你的代码以修复错误的更改。这些是我们对未来的计划,以下是该工具目前在最新版本中支持的内容:
已支持
- ASP.NET
- Class libraries
- Console
- WPF
- WinForms
这些工作负载与 Upgrade Assistant CLI 工具相当。
即将推出
- Xamarin 迁移到 .NET MAUI
- UWP 迁移到 WinUI
- WCF 迁移到 WCF Core
这些迁移类型正在开发中。你现在已经可以升级这些项目,但我们还没有这些项目的代码修复程序。如果你现在就需要迁移这些项目类型,我们建议使用现有的升级助手命令行工具,该工具已经包含代码修复程序。Visual Studio 扩展包也将很快拥有这一程序。
不同的升级类型
升级助手支持3种升级类型。不同的项目类型对应不同的升级类型,因此你只会看到那些适合你的应用程序的选项。
In-place
选择该升级类型,你的原始项目将立即升级。如果你在使用 source control(源代码管理)并且更喜欢自己管理副本,例如,通过使用 branch (分支)管理,你可以选择这一升级类型。
Side-by-side
有了这一升级类型,你的原始项目将保持不变,同时会有一个包含升级代码的副本添加到你的解决方案中。如果你的应用程序有许多升级后可能会损坏的依赖项,则选择此升级类型会很方便。这样你就可以检查你的进度,而不必担心应用程序无法构建。
Side-by-side incremental
这是 Web 应用程序的理想选择。从 ASP.NET 升级到 ASP.NET Core 需要大量工作,有时还需要手动重构(因为这两种技术非常不同)。Class Libraries 通常与 Web 应用程序一起使用,因此我们也为 Class Libraries 启用了此类升级。增量升级会将 .NET 6/7 项目放在现有 .NET Framework 项目旁边,并将在 .NET 6/7 项目中实现的端点路由到那里,而所有其他调用将发送到 .NET Framework 应用程序。通过这种方式,你可以将升级与功能开发结合起来,并将你的项目一一迁移到 .NET 6/7,同时也能确保不会破坏你的应用程序。这种方法最初是在 Microsoft Project Migrations 工具中构建的,你可以将 Visual Studio 中的升级助手视为 Microsoft Project Migrations 经过改进和扩展后的新版本。从 .NET Core 或 .NET 5 升级到 .NET 6/7 比从 .NET Framework 升级要容易得多,因此 .NET Core 或 .NET 5 的升级建议使用 In-place 升级类型。
在下表中,你可以按项目类型找到所有升级类型的状态。

逐步升级
1.安装 Visual Studio 升级助手拓展包。
2.在 Visual Studio 的 Solution Explorer 里右键单击要升级的项目,选择 Upgrade。

3.你将看到主页,其中包含一些升级选项。

在不同的升级类型中介绍了要选择的选项。
4.对于此示例,我选择 In-place. Side-by-side 将非常相似,只需执行一些额外的步骤。side-by-side incremental 的其他功能在我们之前的博客文章中进行了介绍。
5.然后,你需要选择要升级到的框架。该工具将仅建议对你的项目类型有意义的选项。在我的示例中,它是一个 .NET Framework Class Library,因此它也建议使用 .NET Standard。

所有升级都是向前的,这意味着,例如,如果你的项目已在 .NET 6 上,则只会提供 .NET 7 及更高版本。如果你的计算机上未安装所选的 SDK,系统将在下一步中提示你安装它。只需点击链接,并在安装 SDK 后返回升级。.NET Standard 仅建议用于面向 .NET Framework 的 Class Libraries。
6.现在该选择要升级的组件了。最终,你将需要升级所有内容,但是如果你更喜欢逐步升级,则可以选择要开始的屏幕。

7.单击 Upgrade selection 后,你将看到升级进度和升级完成后的报告。

现在,你可以直接从 Visual Studio 中升级 .NET 项目。请在本文下方留言,告诉我们使用体验,以及你的项目还需要什么。谢谢你的反馈!
点我前往原博客了解更多信息~
相关文章:
用 Visual Studio 升级 .NET 项目
现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些项目类型仍正在开发中并将在不久的未来推出&a…...
JavaWeb中FilterListener的神奇作用
文章目录1,Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示1.5.3 问题2,Listener2.1 概述2.2 分类2.3 代码演示最后说一句1,Filter 1.1 Filter概述 F…...
移动端布局
参考链接:抖音-移动端适配 一、移动端布局 flexiblepostcss-pxtorem vue-h5-template 老版本:动态去计算scale,并不影响rem的计算,好处是解决了1px的问题,但是第三方库一般都用dpr为1去做的,这就导致地图或…...
前端无感登录,大文件上传
后端设置token的一个失效时间,前端在token失效后不用重新登录 1,在相应中拦截,判断token返回过期后,调用刷新token的方法 2,后端返回过期的时间,前端判断过期的时间,然后到期后调用对应的方法…...
Spring Boot系列03--自动配置原理
目录1. 相关注解2. 自动配置原理分析3. 自动配置图示Spring Boot的核心优势:自动装配、约定大于配置。 1. 相关注解 ConfigurationProperties(prefix "前缀名")该注解用于自动配置的绑定,可以将application.properties配置中的值注入到 Bean…...
Java多线程(四)---并发编程容器
1.经常使用什么并发容器,为什么?答:Vector、ConcurrentHashMap、HasTable一般软件开发中容器用的最多的就是HashMap、ArrayList,LinkedList ,等等但是在多线程开发中就不能乱用容器,如果使用了未加锁&#…...
Apache Hadoop生态部署-Flume采集节点安装
目录 Apache Hadoop生态-目录汇总-持续更新 一:安装包准备 二:安装与常用配置 2.1:下载解压安装包 2.2:解决guava版本问题 2.3:修改配置 三:修复Taildir问题 3.1:Taildir Source能断点续…...
【OpenFOAM】-算例解析合集
【OpenFOAM】-算例解析合集OlaFlowinterFoamOlaFlow 【OpenFOAM】-olaFlow-算例1- baseWaveFlume 【OpenFOAM】-olaFlow-算例2- breakwater 【OpenFOAM】-olaFlow-算例3- currentWaveFlume 【OpenFOAM】-olaFlow-算例4- irreg45degTank 【OpenFOAM】-olaFlow-算例5- oppositeS…...
数据库|(一)数据库和SQL概述
(一)数据库和SQL概述1.1 数据库的好处1.2 数据库的概念1.3 数据库结构特点1.1 数据库的好处 实现数据持久化使用完整的管理系统统一管理,便于查询 1.2 数据库的概念 DB 数据库(database),存储数据的仓库&…...
【java基础】自定义类
文章目录基本介绍自定义类字段方法构造器main方法基本介绍 什么是类这里就不过多赘述了,这里来介绍关于类的几个名词 类是构造对象的模板或蓝图由类构造对象的过程称为创建类的实例封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现…...
7、STM32 FSMC驱动SRAM
本次使用CubeMx配置FSMC驱动SRAM,XM8A51216 IS62WV51216 原理图: 注意:FSMC_A0必须对应外部设备A0引脚 一、FSMC和FMC区别 FSMC:灵活的静态存储控制器 FMC:灵活存储控制器 区别:FSMC只能驱动静态存储控制器(如&…...
七、虚拟机栈
虚拟机栈出现的背景 1.由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。 2.优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同…...
Linux其他常用命令
Linux其他常用命令查找文件find 命令功能非常强大,通常用在特定目录下搜索符合条件的文件如果省略路径,表示在当前文件夹下查找之前学习的通配符,在使用 find 命令时同时可用演练目标1.搜索桌面目录下,文件名包含1的文件find Desk…...
一次性打包学透 Spring
不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很多 Java 开发者从工作的第一天开始就在使用 Spring Framework,甚至有人调侃“不会 Spring 都不好意思自称是个 Java 开发者”。 之所以出现这种局面…...
1080T、2080T、4070T显卡的深度学习性能测试和结论
先说结论: 4070T显卡FP32的训练和推理速度跟3090应该基本类似。但由于显存12G偏低,4070T不太适合如今的深度学习模型训练(新手列外,大部分模型都能训练起来,耗电也相对很低),更适合测试最新的一…...
SpringBoot搭建SpringMVC项目
前言据我的了解,现在不管是大公司或是小公司,如果使用java开发一个web项目,大部分都会选择使用SpringBoot,关于Springboot的好处,就不在这里过多赘述,总之Springboot有一套完整的生态,从项目构建…...
Prescriptive Analytics for Flexible Capacity Management
3 本节根据Netessine等人(2002年)和Bassok等人(1999年)对我们解决的容量规划问题进行了正式描述。考虑一家以pi(I1,…,I)的单价提供I服务的公司。在每个计划周期t∈{1,……...
超简单的待办事项列表管理器todo
什么是 todo ? todo 是一个自托管的 todo web 应用程序,可让您以简单且最少的方式跟踪您的 todo。📝 老苏觉得和之前介绍的 KissLists 比较像 文章传送门:最简单的共享列表服务器KissLists 官方提供了 Demo 演示站点:https://tod…...
在C#中初测OpencvSharp4
一、配置OpenCV 首先,我们新建一个工程,然后就是给这个工程配置OpenCV了,最简单的方法还是Nuget,来我们右键一个Nuget: 打开Nuget后,你可以直接输入OpenCVSharp4来查找,当然,如果你…...
洛谷P1123 取数游戏(C++)(DFS)
目录 1.题目 题目描述 输入格式 输出格式 输入输出样例 说明/提示 2.AC 1.题目 题目描述 一个N \times MNM的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻88个格…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
