从 .NET Framework 升级到 .NET 后进行现代化

在本文中,你将了解在将应用从 .NET Framework 升级到 .NET 后,可对其进行现代化的不同方式。 使用 .NET 升级助手工具将应用升级到 .NET。

缺少 API

升级 .NET Framework 应用时,你很可能遇到一些不兼容问题。 这是因为 .NET Framework 是一种仅限 Windows 的技术,而 .NET 是一种跨平台技术。 而某些库并非如此。 例如,.NET 不像 .NET Framework 那样提供现成的 API 来访问 Windows 注册表。 Microsoft.Win32.Registry NuGet 包提供对 Windows 注册表的支持。 许多特定于 .NET Framework 的库已移植到 .NET 或 .NET Standard,并托管在 NuGet 上。 如果在项目中发现缺少引用,请搜索 NuGet。

Windows 兼容包

如果在迁移后有一些 .NET Framework API 的依赖项,而新版本的 .NET 不支持这些依赖项,可以在 Microsoft.Windows.CompatibilityNuGet 包中找到它们。 它向 .NET 项目添加了大约 20,000 个 API,从而显著增加了项目可用的 API 集。 这些 API 包括仅限 Windows 的 API,例如与 Windows Management Instrumentation (WMI) 和 Windows EventLog 相关的 API。 有关详细信息,请参阅使用 Windows Compatibility Pack 将代码移植到 .NET 中

Web 浏览器控件

面向 Windows 桌面技术的项目(例如 Windows Presentation Foundation 或 Windows 窗体)可能包含 Web 浏览器控件。 提供的 Web 浏览器控件很可能是在 HTML5 和其他现代 Web 技术之前设计的,现在已过时。 Microsoft 发布了 Microsoft.Web.WebView2NuGet 包 作为 Web 浏览器控件的现代替代品。

App.config

.NET Framework 使用 App.config 文件为应用加载设置,例如连接字符串和日志提供程序配置。 现代 .NET 使用 appsettings.json 文件进行应用设置。 CLI 版本的升级助手负责处理 App.config 文件到 appsettings.json 的转换,而不是 Visual Studio 扩展。

提示

如果不想使用 appsettings.json 文件,可以将 System.Configuration.ConfigurationManager NuGet 包添加到应用,代码将编译并使用 App.config 文件。

尽管 appsettings.json 是存储和检索设置和连接字符串的现代方法,但应用仍具有使用 App.config 文件的代码。 迁移应用时,System.Configuration.ConfigurationManager NuGet 包已添加到项目中,以便使用 App.config 文件的代码继续编译。

随着库升级到 .NET,它们将通过支持 appsettings.json(而不是 App.config)实现现代化。例如,已针对 .NET 6+ 升级的 .NET Framework 中的日志记录提供程序不再使用 App.config 进行设置。 你最好遵循其方向,同时避免使用 App.config。

Microsoft.Extensions.Configuration NuGet 包提供对 appsettings.json 的支持。

执行以下步骤,将 appsettings.json 文件用作配置提供程序:

  1. 如果已升级的应用引用 System.Configuration.ConfigurationManager NuGet 包或库,请删除该包或库。

  2. 添加 Microsoft.Extensions.Configuration.Json NuGet 包。

  3. 创建名为 appsettings.json 的文件。

    1. 在“解决方案资源管理器”窗口中右键单击项目文件,然后选择“添加”>“新建项...”。
    2. 在搜索框中输入 json
    3. 选择“JavaScript JSON 配置文件”模板,并将“名称”设置为“appsettings.json”。
    4. 按“添加”将新文件添加到项目。
  4. 将 appsettings.json 文件设置为复制到输出目录。

    在“解决方案资源管理器”窗口中,找到“appsettings.json”文件并设置以下“属性”:

    • 生成操作 = 内容
    • 复制到输出目录 = 始终复制
  5. 在应用的启动代码中,需要加载设置文件。

    应用的启动代码因项目类型而异。 例如,WPF 应用使用 App.xaml.cs 文件进行全局设置,而 Windows 窗体应用使用 Program.Main 方法启动。 无论如何,启动时都需要执行以下两项操作:

    • 创建一个 internal static(在 Visual Basic 中为 Friend Shared)成员,该成员可从应用中的任何位置访问。
    • 在启动期间,将一个实例分配给该成员。

    以下示例创建名为 Config 的成员,在 Main 方法中为其分配实例,并加载连接字符串:

    using Microsoft.Extensions.Configuration;
    
    internal class Program
    {
        internal static IConfiguration Config { get; private set; }
    
        private static void Main(string[] args)
        {
            Config = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build();
    
            // Use the config file to get a connection string
            string? myConnectionString = Config.GetConnectionString("database");
    
            // Run the rest of your app
        }
    }
    
    Imports Microsoft.Extensions.Configuration
    
    Module Program
    
        Private _config As IConfiguration
    
        ' Shared not required since Program is a Module
        Friend Property Config As IConfiguration
    
            Get
                Return _config
            End Get
            Private Set(value As IConfiguration)
                _config = value
            End Set
    
        End Property
    
        Sub Main(args As String())
    
            Config = New ConfigurationBuilder() _
                .AddJsonFile("appsettings.json") _
                .Build()
    
            ' Use the config file to get a connection string
            Dim myConnectionString As String = Config.GetConnectionString("database")
    
            ' Run the rest of your app
        End Sub
    End Module
    
  6. 更新代码的其余部分以使用新的配置 API。

  7. 从项目中删除 App.config 文件。

    注意

    确保应用可在没有 App.config 文件的情况下正常运行。 通过源代码管理或将文件复制到其他位置来备份 App.config 文件。 全面测试应用后,请删除 App.config 文件