GitHub Copilot 应用现代化 - 适用于 .NET 的升级是一个功能强大的 Visual Studio 扩展,可用于将项目升级到较新版本的 .NET、升级依赖项并应用代码修复。
GitHub Copilot 应用现代化作为 Visual Studio 扩展分发,是交互式升级过程。
先决条件
- Windows 操作系统
- Visual Studio 2022 版本 17.14 或更高版本。
- .NET 桌面开发工作负载。
-
使用具有 Copilot 访问权限的 GitHub 帐户 登录 Visual Studio。
- 可以免费使用 GitHub Copilot。
- 代码必须位于本地 Git 存储库中。
- 代码必须用 C# 编写。
- 可选但建议:将 GitHub Copilot 代理模式 用于升级过程。 有关详细信息,请参阅 在 Visual Studio 中使用 Copilot 代理模式。
有关安装说明,请参阅 安装 GitHub Copilot 应用现代化 - 适用于 .NET 的升级。
支持的项目类型
GitHub Copilot 应用现代化支持升级用 C# 编码的项目。 支持以下类型的项目:
- ASP.NET 和相关技术,如 MVC、Razor Pages、Web API
- Blazor
- Azure Functions(Azure 功能服务)
- Windows Presentation Foundation
- Windows 窗体
- 类库
- 控制台应用
重要
当前版本的扩展不支持从 .NET Framework 升级到 .NET。 在这些方案中,使用 .NET 升级助手迁移到 .NET ,然后使用此工具实现代码的现代化。
升级路径
支持下列升级路径:
- 将项目从 .NET Core 升级到 .NET。
- 将项目从旧版 .NET 升级到最新版本。
- 使代码库现代化。
启动升级过程
升级的第一步是通过与 GitHub Copilot 交互来生成计划。 可通过两种方法让 Copilot 使用该工具:
右键单击解决方案或项目,然后选择 “使用 GitHub Copilot 升级”。
—或—
启用 GitHub Copilot 代理模式,并要求新的 Copilot 聊天升级解决方案或项目。
重要
启用 GitHub Copilot 代理模式后,将聊天模式设置为 “代理 ”并启用 upgrade_start 工具。
生成计划
该过程启动后,Copilot 会分析项目及其依赖项,然后询问有关升级的一系列问题。 回答这些问题后,会以 Markdown 文件的形式编写升级计划。 如果告知 Copilot 继续升级,此计划描述了升级过程的步骤。
可以通过编辑 Markdown 文件来更改升级步骤或添加更多上下文来调整计划。
谨慎
计划基于项目的依赖关系生成。 如果以无法完成迁移路径的方式修改计划,则升级不会成功。 例如,如果 项目 A 依赖于 项目 B 并从升级计划中删除 项目 B ,升级 项目 A 可能会失败。
以下代码片段演示了计划的结构:
# .NET 9.0 Upgrade Plan
## Execution Steps
1. Validate that an .NET 9.0 SDK required for this upgrade is installed on the machine and if not, help to get it installed.
2. Ensure that the SDK version specified in global.json files is compatible with the .NET 9.0 upgrade.
3. Upgrade projects to .NET 9.0.
- 3.1. Upgrade RazorMovie.csproj
- 3.2. Upgrade RazorMovie.Tests.csproj
4. Run unit tests to validate upgrade in the projects listed below:
- RazorMovie.Tests.csproj
## Settings
This section contains settings and data used by execution steps.
### Aggregate NuGet packages modifications across all projects
NuGet packages used across all selected projects or their dependencies that need version update in projects that reference them.
| Package Name | Current Version | New Version | Description |
|:-------------------------------------------------|:-------------------:|:-----------:|:-------------------------|
| HtmlSanitizer | 7.1.542 | 9.0.884 | Security vulnerability |
| Microsoft.Data.SqlClient | 4.0.5 | 6.0.2 | Deprecated |
| Microsoft.EntityFrameworkCore.Design | 6.0.0-rtm.21467.1 | 9.0.5 | Recommended for .NET 9.0 |
| Microsoft.EntityFrameworkCore.SqlServer | 6.0.0-rc.1.21452.10 | 9.0.5 | Recommended for .NET 9.0 |
| Microsoft.EntityFrameworkCore.Tools | 6.0.0-rc.1.21452.10 | 9.0.5 | Recommended for .NET 9.0 |
| Microsoft.VisualStudio.Web.CodeGeneration.Design | 6.0.0-rc.1.21464.1 | 9.0.0 | Recommended for .NET 9.0 |
...
执行升级
升级计划准备就绪后,请告知 Copilot 开始升级。 升级过程启动后,Copilot 会让你知道它在聊天窗口中执行的作,并打开 “升级进度详细信息” 文档,其中列出了每个步骤的状态。 如果遇到问题,Copilot 会暂停并询问你的方向或帮助解决这些问题。
该工具的体验因是否启用了 Copilot 代理模式 而有所不同。
Copilot 代理模式
启用和使用 Copilot 代理模式时,Copilot 会尝试识别问题的原因并应用修补程序。 如果 Copilot 似乎无法纠正该问题,它会请求你的帮助。 当你进行干预时,Copilot 会从所做的更改中学习,并尝试自动为你应用这些更改,如果问题再次遇到。
Copilot 修复模式
如果代理模式已禁用或未使用,则使用 Copilot 修复模式。 Copilot 报告它发现的问题,并指导你完成所需的修复。 它依赖于你去执行实际的代码更改,然后对那些修复进行验证。
升级过程中的每个主要步骤都提交到本地 Git 存储库。
升级后的结果
升级完成后,将生成描述升级的每个步骤的报告。 该工具为升级过程的每个部分创建 Git 提交,以便可以轻松回滚更改或获取有关更改的详细信息。 报告包含 Git 提交哈希值。
该报表还提供了一个 “后续步骤 ”部分,描述升级完成后应执行的步骤。 以下示例显示了包含测试失败的已完成升级的报告:
# .NET 9 Upgrade Report
## Project modifications
| Project name | Old Target Framework | New Target Framework | Commits |
|:-----------------------------------------------|:-----------------------:|:----------------------------:|---------------------------|
| RazorMovie | net6.0 | net9.0 | af8cf633, aa61a18d |
| MvcMovie | net6.0 | net9.0 | cc8c9015 |
| WpfMovie | net6.0-windows | net9.0-windows | 9c4b13f9 |
| RazorMovie.Tests | net6.0 | net9.0 | b8d85e97 |
| MvcMovie.Tests | net6.0 | net9.0 | b8d85e97 |
| WpfMovie.Tests | net6.0-windows | net9.0-windows7.0 | b8d85e97 |
## NuGet Packages
| Package Name | Old Version | New Version | Commit Id |
|:-------------------------------------------------|:-------------------:|:-----------:|-----------|
| HtmlSanitizer | 7.1.542 | 9.0.884 | af8cf633 |
| Microsoft.Data.SqlClient | 4.0.5 | 6.0.2 | bf8deeac |
| Microsoft.EntityFrameworkCore.Design | 6.0.0-rtm.21467.1 | 9.0.5 | bf8deeac |
| Microsoft.EntityFrameworkCore.SqlServer | 6.0.0-rc.1.21452.10 | 9.0.5 | bf8deeac |
| Microsoft.EntityFrameworkCore.Tools | 6.0.0-rc.1.21452.10 | 9.0.5 | bf8deeac |
| Microsoft.VisualStudio.Web.CodeGeneration.Design | 6.0.0-rc.1.21464.1 | 9.0.0 | bf8deeac |
## All commits
| Commit ID | Description |
|:----------|:--------------------------------------------------------|
| af8cf633 | Update HtmlSanitizer package in RazorMovie.csproj |
| aa61a18d | Upgrade target framework in RazorMovie.csproj |
| cc8c9015 | Upgrade to .NET 9 and update dependencies |
| bf8deeac | Update package references in MvcMovie.csproj |
| 9c4b13f9 | Update WpfMovie.csproj to target .NET 9.0 |
| b8d85e97 | Update test projects to .NET 9 and enhance dependencies |
## Test Results
| Project Name | Passed | Failed | Skipped |
|:-----------------------|:------:|:------:|:-------:|
| RazorMovie.Tests | 0 | 0 | 0 |
| MvcMovie.Tests | 2 | 0 | 0 |
| WpfMovie.Tests | 6 | 1 | 0 |
## Next steps
- Review the test results and address the single failing test in `WpfMovie.Tests`.
- Ensure all updated NuGet packages are compatible with your application.
- Leverage new features and improvements in .NET 9.0 for your projects.
遥测
该工具仅收集有关项目类型、意图升级和升级持续时间的数据。 数据通过 Visual Studio 本身收集和聚合,不包含任何用户身份信息。 有关Microsoft隐私策略的详细信息,请参阅 Visual Studio 客户体验改善计划。