使用.NET升级助手将 WPF 应用升级到 .NET 7
升级.NET助手是一种命令行工具,可帮助将框架 WPF 应用升级到 .NET.NET 7。 本文将提供:
有关如何安装该工具的详细信息,请参阅升级助手概述.NET。 提示 升级 .NET 助手正在频繁接收更新。 如果在使用该工具时发现问题,请在工具的 GitHub 存储库中进行报告。 可以使用基本 WPF 示例项目来测试通过升级助手进行升级。 升级 .NET 助手工具包括一个分析模式,用于执行简化的试运行来升级应用。 它可以提供有关在升级开始之前可能需要进行的更改的见解。 打开终端,导航到目标项目或解决方案所在的文件夹。 运行 例如,使用基本 WPF 示例应用运行分析模式会产生以下输出,表明在升级之前不会进行任何更改: 控制台
> upgrade-assistant analyze .\WebSiteRatings.sln
[15:39:00 INF] Loaded 9 extensions
[15:39:02 INF] Using MSBuild from C:\Program Files\dotnet\sdk\7.0.201[15:39:02 INF] Using Visual Studio install from C:\Program Files\Microsoft Visual Studio\2022\Preview [v17]
[15:39:05 INF] Writing output to C:\code\migration\AnalysisReport.sarif
[15:39:06 INF] Recommending Windows TFM net7.0-windows for project WebSiteRatings.csproj because the project either has Windows-specific dependencies or builds to a WinExe
[15:39:06 INF] Marking assembly reference System.Configuration for removal based on package mapping configuration System.Configuration
[15:39:06 INF] Adding package System.Configuration.ConfigurationManager based on package mapping configuration System.Configuration
[15:39:08 INF] Package EntityFramework, Version=6.2.0 does not support the target(s) net7.0-windows but a newer version (6.4.4) does.
[15:39:09 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.410601) needs to be added
[15:39:10 INF] Adding Microsoft.Windows.Compatibility 7.0.0 helps with speeding up the upgrade process for Windows-based APIs
[15:39:13 INF] Recommending Windows TFM net7.0-windows for project StarVoteControl.csproj because the project either has Windows-specific dependencies or builds to a WinExe
[15:39:13 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.410601) needs to be added
[15:39:13 INF] Adding Microsoft.Windows.Compatibility 7.0.0 helps with speeding up the upgrade process for Windows-based APIs
[15:39:13 INF] Running analyzers on WebSiteRatings
[15:39:14 INF] Identified 0 diagnostics in project WebSiteRatings
[15:39:14 INF] Running analyzers on StarVoteControl
[15:39:15 INF] Identified 0 diagnostics in project StarVoteControl
[15:39:15 INF] Analysis Complete, the report is available at C:\code\migration\AnalysisReport.sarif
输出中有很多内部诊断信息,但某些信息非常有用。 请注意,分析模式指示升级建议项目将 如果报告了任何错误或警告,请在开始升级前处理这些错误或警告。 打开终端,导航到目标项目或解决方案所在的文件夹。 运行 升级包含多个项目的解决方案时,必须选择解决方案中的哪个项目是 入口点。 根据入口点项目,创建一个依赖项关系图,以确定要升级哪些项目以及按何种顺序升级。 如果解决方案包含的项目不属于依赖项关系图,则忽略这些项目,你需要单独升级这些项目。 首先升级依赖项,然后升级 入口点 项目。 使用 基本 WPF 示例 应用升级解决方案文件: 控制台
该工具运行并显示它将执行的步骤列表。 完成每个步骤后,该工具将提供一组命令,让用户应用或跳过下一步或其他选项,例如:
按 Enter 而不选择数字会选择列表中的第一项。 每个步骤初始化后,如果应用该步骤,它可能会提供有关其认为会发生的情况的信息。 下一步是选择要升级的项目。 应该会看到以下输出: Upgrade Steps
1. [Next step] Select an entrypoint
2. Select project to upgrade
Choose a command:
1. Apply next step (Select an entrypoint)
2. Skip next step (Select an entrypoint)
3. See more step details
4. Configure logging
5. Exit
提示 请注意每个步骤的输出,因为它可能包含有关工具无法升级的内容的信息。 根据应用的复杂性,该工具完成后,可能需要执行更多升级工作。 确定入口点后,下一步是选择要升级的项目。 使用 基本 WPF 示例 应用时,该工具首先确定 StarVoteControl 项目,因为 WebSiteRatings 项目依赖于它。 最好遵循建议的升级路径。
选择项目后,会列出该工具执行的升级步骤列表。 选择第一步,即备份项目。 步骤列表类似于以下代码片段: [15:50:50 INF] Initializing upgrade step Back up project
Upgrade Steps
Entrypoint: C:\code\migration\WebSiteRatings\WebSiteRatings.csproj
Current Project: C:\code\migration\WebSiteRatings\WebSiteRatings.csproj
1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
a. Duplicate reference analyzer
b. Package map reference analyzer
c. Target compatibility reference analyzer
d. Upgrade assistant reference analyzer
e. Windows Compatibility Pack Analyzer
f. MyDotAnalyzer reference analyzer
g. Newtonsoft.Json reference analyzer
h. Windows App SDK package analysis
i. Transitive reference analyzer
4. Update TFM
5. Update NuGet Packages
a. Duplicate reference analyzer
b. Package map reference analyzer
c. Target compatibility reference analyzer
d. Upgrade assistant reference analyzer
e. Windows Compatibility Pack Analyzer
f. MyDotAnalyzer reference analyzer
g. Newtonsoft.Json reference analyzer
h. Windows App SDK package analysis
i. Transitive reference analyzer
6. Add template files
7. Update WCF service to CoreWCF (Preview)
8. Upgrade app config files
a. Convert Application Settings
b. Convert Connection Strings
c. Disable unsupported configuration sections
9. Update source code
a. Apply fix for UA0002: Types should be upgraded
b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
10. Move to next project
Choose a command:
1. Apply next step (Back up project)
2. Skip next step (Back up project)
3. See more step details
4. Select different project
5. Configure logging
6. Exit
每个步骤首先详细说明要执行的操作,然后提示你执行此操作。 例如,上一个代码片段位于步骤 1 中。[下一步]备份项目。 跳过任何不适用的步骤。 例如,如果该工具处理 7。将 WCF 服务更新到 CoreWCF (预览版) ,但应用未定义 WCF 服务,会跳过它并处理步骤 8。 反过来,如果步骤 8 不适用,也会跳过它。 当该工具尝试查找适用的下一步时,你可能会看到许多步骤被跳过。 升级项目后,该工具会提示你选择依赖项关系图中的下一个项目进行升级。 升级所有项目后,工具会执行“完成升级”步骤,从而完成升级
升级完成后,迁移的 WPF 项目将类似于以下 XML: XML
<Project Sdk='Microsoft.NET.Sdk'>
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWPF>true</UseWPF>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<ItemGroup>
<None Update='sqlite.db'>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include='..\StarVoteControl\StarVoteControl.csproj' />
</ItemGroup>
<ItemGroup>
<PackageReference Include='System.Data.DataSetExtensions' Version='4.5.0' />
<PackageReference Include='System.Configuration.ConfigurationManager' Version='5.0.0' />
<PackageReference Include='Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers' Version='0.4.410601'>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include='EntityFramework' Version='6.4.4' />
</ItemGroup>
<ItemGroup>
<Service Include='{508349B6-6B84-4DF5-91F0-309BEEBAD82D}' />
</ItemGroup>
<ItemGroup>
<PackageReference Include='MahApps.Metro' Version='2.4.9' />
<PackageReference Include='Microsoft.Data.Sqlite' Version='1.0.0' />
<PackageReference Include='SQLite' Version='3.12.3' />
</ItemGroup>
<ItemGroup>
<Content Include='appsettings.json' />
</ItemGroup>
</Project>
请注意, .NET 升级助手还会向项目添加分析器,以帮助继续升级过程,例如 升级项目后,需要对其进行编译和测试。 很可能还有更多工作要做才能完成升级。 应用的框架版本可能包含 .NET 项目实际未使用的库引用。 分析每个引用并确定是否需要它。 该工具可能还添加或升级了对错误版本的 NuGet 包引用。 本文发布时,需要以下更新才能完成示例项目的升级:
.NET 框架使用 App.config 文件加载应用的设置,例如连接字符串和日志记录提供程序。 .NET 现在将 appsettings.json 文件用于应用设置。 升级工具会尽力将设置和连接字符串从 App.config 文件迁移到 appsettings.json 文件,但请确保对其进行比较并验证一切是否正确。 尽管 appsettings.json 是存储和检索设置和连接字符串的新式方式,但代码未使用它,并且仍依赖于 App.config 文件。 App.config文件通过 当其他库升级到 .NET时,它们通过支持 appsettings.json 而不是 App.config进行现代化。例如,已针对 6+ 升级的.NET框架中的.NET日志记录提供程序不再将App.config用于设置。 你最好遵循其方向,同时避免使用 App.config。 例如,升级 WPF 示例应用后,请删除本地
WebBrowserWPF 示例应用引用的控件基于 Internet Explorer,它已过期。 WPF 包含 .NET 基于 Microsoft Edge 的新浏览器控件。 完成以下步骤以升级到新的 WebView2 Web 浏览器控件:
根据你的应用的用户运行的 Windows 版本,他们可能需要安装 WebView2 运行时。 有关详细信息,请参阅 WPF 应用中的 WebView2 入门。 如果使用 Visual Basic 对项目进行编码,升级助手可能包含额外的步骤,例如迁移 7. Update Visual Basic project
a. Update vbproj to support 'My.' namespace
|
|