从 .NET Framework 升级到 .NET 后进行现代化
在本文中,你将了解将应用从 .NET Framework 升级到 .NET 后,可以采用不同的方式实现应用现代化。 使用 .NET 升级助手 工具将应用升级到 .NET。
缺少 API
升级 .NET Framework 应用时,很可能有些不兼容。 这是因为 .NET Framework 是仅限 Windows 的技术,.NET 是一种跨平台技术。 有些图书馆不是这样的。 例如,.NET 不提供开箱即用的 API 来访问 Windows 注册表,那样的功能在 .NET Framework 中是可用的。 Microsoft.Win32.Registry
NuGet 包提供了对 Windows 注册表的支持。 许多特定于 .NET Framework 的库已移植到 .NET 或 .NET Standard,并且托管在 NuGet 上。 如果在项目中发现缺少引用,请搜索 NuGet。
Windows 兼容性包
如果在迁移后对新版本的 .NET 不支持的 .NET Framework API 有一些依赖项,则可能在 Microsoft.Windows.Compatibility
NuGet 包中找到它们。 它将大约 20,000 个 API 添加到 .NET 项目,这大大增加了项目可用的 API 集。 这些 API 包括仅限 Windows 的 API,例如与 Windows Management Instrumentation(WMI)和 Windows EventLog 相关的 API。 有关详细信息,请参阅 使用 Windows 兼容性包将代码移植到 .NET。
Web 浏览器控件
面向 Windows 桌面技术(如 Windows Presentation Foundation 或 Windows 窗体)的项目可能包括 Web 浏览器控件。 提供的 Web 浏览器控件很可能在 HTML5 和其他新式 Web 技术之前设计,并被视为已过时。 Microsoft 发布了 Microsoft.Web.WebView2
NuGet 包作为 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 文件用作配置提供程序:
如果您的升级应用引用了
System.Configuration.ConfigurationManager
NuGet 包或库,请将其删除。添加
Microsoft.Extensions.Configuration.Json
NuGet 包。创建名为 appsettings.json的文件。
- 右键单击解决方案资源管理器 中的项目文件,然后选择“添加 >新项。
- 在搜索框中,输入
json
。 - 选择 JavaScript JSON 配置文件 模板,并将 名称 设置为 appsettings.json。
- 按 添加 将新文件添加到项目。
将 appsettings.json 文件设置为复制到输出目录。
在解决方案资源管理器 中,找到 appsettings.json 文件并设置以下 属性:
- 生成操作:内容
- 复制到输出目录:始终复制
在应用的启动代码中,需要加载设置文件。
应用的启动代码因项目类型而异。 例如,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
- 在您的应用程序中创建一个
更新其余代码以使用新的配置 API。
从项目中删除 App.config 文件。
谨慎
确保应用在没有 App.config 文件的情况下正常运行。 通过源代码管理或通过在其他位置复制文件来备份 App.config 文件。 全面测试应用后,删除 App.config 文件。