【问题标题】:Adding configuration to windows forms on .NET 5.0在 .NET 5.0 上向 Windows 窗体添加配置
【发布时间】:2021-01-11 15:39:12
【问题描述】:

我正在将现有的 Windows 窗体 C# 应用程序迁移到 .NET 5.0,并且我正在尝试遵循 migration docs 上提供的说明。一切正常,但还有一件事要做:从 app.config 文件迁移调试/发布设置。

我考虑过重用 NET Core 的 IConfiguration,但是将 Microsoft.Extensions.Configuration nuget 包添加到项目中(这样我就可以创建一个 ConfigurationBuilder 实例)似乎破坏了一切(例如, using System; 将开始产生编译错误)。

对正在发生的事情有任何想法吗?你们如何将 Windows 窗体应用程序上的设置从 4.8 迁移到 .NET 5.0?

【问题讨论】:

  • “将 Microsoft.Extensions.Configuration nuget 包添加到项目中(以便我能够创建 ConfigurationBuilder 实例)似乎破坏了一切”不是我们可以提供帮助的问题陈述。

标签: c# winforms .net-5


【解决方案1】:

在 Windows 窗体中使用 .NET 5、.NET 6 或 .NET Core 配置系统

您可以按照以下步骤操作:

  1. 创建一个 WinForms .NET (5) 应用程序

  2. 安装Microsoft.Extensions.Hosting 包。

    您可能想要安装 Microsoft.Extensions.Configuration.JsonMicrosoft.Extensions.Configuration.Binder 而不是托管包,这对于本示例来说已经足够了。

  3. 将 appsettings.json 文件添加到项目根目录,将其构建操作设置为 Content 并将复制到输出目录设置为 Always。

  4. 修改程序类:

    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;

  5. 设置文件内容:

    {
      "MySettings": {
        "Text": "Title of the form",
        "BackColor": "255,0,0",
        "Size": "300,200"
      }
    }
    
  6. 要读取设置,请打开 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;
    }
    
  7. 运行应用程序并查看结果:

对 Windows 窗体使用经典设置

然后回答您的最后一个问题:你们如何将 Windows 窗体应用程序上的设置从 4.8 迁移到 .NET 5.0?

您似乎熟悉 .NET 4.x 中的应用程序/用户设置。 .NET 5 仍然支持相同的功能。Settings.settings 文件是默认项目模板的一部分,它允许您创建具有设计器支持和更多功能的用户设置和应用程序设置。你可以看看Application Settings for Windows Forms

【讨论】:

  • 我已经按照这些思路做了一些事情来让它发挥作用。但是,当您迁移解决方案时,CS+Resharper 仍然无法正常工作。顺便说一句,如果我决定通过使用 host 来改进它,以便获得我们在 asp.net 中习惯的所有好东西,你知道它是否已经有一个有效的生命周期吗?
  • 嗯,对我来说它工作得天衣无缝。关于host,我自己没有在WinForms中试过,不过你可以看看这个blog post
  • 是的,我已经看到了……但是与主机的集成并不是那么好。但是,我很想重用这个github.com/alex-oswald/WindowsFormsLifetime 看看它是否有效:)
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多