我正在将现有的 Windows 窗体 C# 应用程序迁移到 .NET 5.0,并且我正在尝试遵循迁移文档 https://learn.microsoft.com/en-us/dotnet/desktop/winforms/migration/?view=netdesktop-5.0。一切正常,但还有一件事要做:从 app.config 文件迁移调试/发布设置。
我考虑过重用 NET CoreIConfiguration
,但将 Microsoft.Extensions.Configuration nuget 包添加到项目中(以便我能够创建一个ConfigurationBuilder
例如)似乎破坏了一切(例如,using System;
将开始生成编译错误)。
对发生的事情有什么想法吗?你们如何将 Windows 窗体应用程序上的设置从 4.8 迁移到 .NET 5.0?
在 Windows 窗体中使用 .NET 5、.NET 6 或 .NET Core 配置系统
您可以按照以下步骤操作:
-
创建 WinForms .NET (5) 应用程序
-
Install Microsoft.Extensions.Hosting
包裹。
您可能想要安装的不是托管包Microsoft.Extensions.Configuration.Json
and Microsoft.Extensions.Configuration.Binder
对于这个例子来说就足够了。
-
将 appsettings.json 文件添加到项目根目录,将其构建操作设置为“内容”,并将“复制到输出目录”设置为“始终”。
-
修改程序类:
static class Program
{
public static IConfiguration Configuration;
static void Main(string[] args)
{
//To register all default providers:
//var host = Host.CreateDefaultBuilder(args).Build();
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
确保您已添加using Microsoft.Extensions.Configuration;
-
设置文件内容:
{
"MySettings": {
"Text": "Title of the form",
"BackColor": "255,0,0",
"Size": "300,200"
}
}
-
要读取设置,请打开 Form1.cs 并粘贴以下代码:
public class MySettings
{
public string Text { get; set; }
public Color BackColor { get; set; }
public Size Size { get; set; }
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var mySettings = Program.Configuration.GetSection("MySettings").Get<MySettings>();
this.Text = mySettings.Text;
this.BackColor = mySettings.BackColor;
this.Size = mySettings.Size;
}
-
运行应用程序并查看结果:
使用 Windows 窗体的经典设置
并回答您的最后一个问题:你们如何将 Windows 窗体应用程序上的设置从 4.8 迁移到 .NET 5.0?
您似乎熟悉 .NET 4.x 中的应用程序/用户设置。 .NET 5 中仍然支持相同的功能。Settings.settings
文件是默认项目模板的一部分,它允许您在设计器支持和更多功能的情况下创建用户设置和应用程序设置。你可以看看.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)