从 Windows 窗体 .NET Framework 迁移到 .NET

本文介绍如何使用 .NET 升级助手将Windows 窗体桌面应用升级到 .NET。 Windows 窗体仍然是仅限 Windows 的框架,尽管 .NET 是一种跨平台技术。

先决条件

评估

在执行升级之前,应分析项目。 使用 .NET 升级助手对项目执行代码分析会生成可以引用的报表,以识别潜在的迁移阻止程序。

若要分析项目并生成报表,请右键单击解决方案资源管理器中的解决方案文件,然后选择“升级”。 有关执行分析的详细信息,请参阅 使用 .NET 升级助手分析项目。

迁移依赖项

如果要升级多个项目,请从没有依赖项的项目开始。 在匹配游戏示例中,MatchingGame 项目依赖于 MatchingGame.Logic 库,因此应首先升级 MatchingGame.Logic

提示

请务必对代码进行备份,例如在源代码管理中或副本中。

使用以下步骤在 Visual Studio 中升级项目:

  1. 右键单击“解决方案资源管理器”窗口中的 MatchingGame.Logic 项目,然后选择“升级”:

    Visual Studio 中 .NET 升级助手的“升级”菜单项的屏幕截图。

    将打开一个新选项卡,提示你选择要执行的升级。

  2. 选择“就地项目升级”。

    .NET 升级助手选项卡的屏幕截图。突出显示了“就地项目升级”选项。

  3. 接下来,选择目标框架。

    根据要升级的项目类型,会显示不同的选项。 .NET Framework 和 .NET 都可以使用 .NET Standard 2.0 。 如果库不依赖于桌面技术(如Windows 窗体),这是一个不错的选择,此项目确实如此。

    选择 .NET 9.0 ,然后选择“ 下一步”。

    .NET 升级助手的屏幕截图。目标框架提示已打开,.NET 8 会突出显示“下一步”按钮。

  4. 此时将显示一个树状结构,其中包含与项目相关的所有工件,例如代码文件和库。 可以升级单个生成生成工件或整个项目(这是默认设置)。 选择“升级选择”以开始升级。

    .NET 升级助手的屏幕截图。“选择组件”页处于打开状态,其中突出显示了“升级选择”按钮。

  5. 升级完成后,将显示结果:

    .NET 升级助手的升级结果选项卡的屏幕截图,其中显示了项目中的已迁移项。

    具有实心绿色圆圈的生成工件已升级,而具有空绿色圆圈的生成工件则被跳过。 跳过的生成工件意味着升级助手没有找到任何可以升级的内容。

现在应用程序的支持库已升级,请升级主应用程序。

Visual Basic 项目说明

目前,.NET 升级助手无法识别在 .NET Framework 上的 Visual Basic 模板创建的设置文件中的用法 System.Configuration 。 它也不尊重使用 My .NET Framework 项目中使用的扩展,例如 My.ComputerMy.User。 这些扩展已在 .NET 中删除。 由于这两个问题,使用 .NET 升级助手迁移后,Visual Basic 库不会编译。

若要解决此问题,项目必须面向 Windows 并引用Windows 窗体。

  1. 迁移完成后,双击解决方案资源管理器窗口中的 MatchingGame.Logic 项目
  2. 找到 <Project>/<PropertyGroup> 元素。
  3. 在 XML 编辑器中,将值 <TargetFramework> 从中 net9.0 更改为 net9.0-windows
  4. 添加到 <UseWindowsForms>true</UseWindowsForms> 后面的 <TargetFramework>行。

项目设置应类似于以下代码片段:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <OutputType>Library</OutputType>
    <MyType>Windows</MyType>

    ... other settings removed for brevity ...

迁移主项目

升级所有支持库后,即可升级主应用项目。 对于示例应用程序,只有一个库项目需要升级,该项目已在上一部分中升级。

  1. 右键单击“解决方案资源管理器”窗口中的 MatchingGame 项目,然后选择“升级”:
  2. 选择“就地项目升级”。
  3. 选择目标框架的 .NET 9.0,然后选择“下一步”。
  4. 保留选中所有项目,然后选择“升级选择”。

升级完成后,将显示结果。 请注意 Windows 窗体项目为何具有警告符号。 展开该项并显示有关该步骤的详细信息:

.NET 升级助手的升级结果选项卡的屏幕截图,其中一些结果项具有警告符号。

请注意,项目升级组件提到默认字体已更改。 由于字体可能会影响控件布局,因此你需要检查项目中的每一个窗体和自定义控件,以确保 UI 正确排列。

生成干净的内部版本

升级主项目后,清理并编译它。

  1. 右键单击“解决方案资源管理器”窗口中的 MatchingGame 项目,然后选择“清理”。
  2. 右键单击“解决方案资源管理器”窗口中的 MatchingGame 项目,然后选择“生成”。

如果应用程序遇到任何错误,可以在“错误列表”窗口中找到这些错误,并提供修复这些错误的建议。

Windows 窗体匹配游戏示例项目现已升级到 .NET 9。

升级后体验

如果要将应用从 .NET Framework 移植到 .NET,请查看 从 .NET Framework 升级到 .NET 后的现代化文章。