对于使用.NET 5、.NET 6或.Net Core〉=3.0的WPF应用程序,保持用户设置的首选方式是什么?
.NET用户设置到哪里去了?
创建了WPF .Net Core 3.0项目(VS 2019 V16.3.1)现在我已经看到没有属性.设置部分了。[更新2022:在.NET 6中,它仍然是相同的]
在线搜索后,开始深入到Microsoft. Extensions. Configuration中。
除了臃肿的代码访问设置,现在更糟-〉没有保存?
User Configuration Settings in .NET Core
幸运或不幸的是,Microsoft.Extensions.Configuration的设计不支持保存。阅读更多Github问题Why there is no save in ConfigurationProvider?
对于使用.Net Core〉=3.0 / .NET5 / .NET6的WPF应用程序,保持用户设置的首选方法是什么?
在〈= .Net 4.8之前,它就像这样简单:
将变量添加到属性。
启动时读取变量
var culture = new CultureInfo(Properties.Settings.Default.LanguageSettings);
- 当变量改变时-〉立即保存它
Properties.Settings.Default.LanguageSettings = selected.TwoLetterISOLanguageName; Properties.Settings.Default.Save();
7条答案
按热度按时间jdg4fx2g1#
您可以添加相同的旧的好的设置文件,例如通过右键单击属性-〉添加-〉新项目,并搜索“设置”。该文件可以在设置设计器中编辑,并像以前在.net框架项目中一样使用(ConfigurationManager,Settings.Default.Upgrade(),Settings.Default.保存等工作)。
将app.config文件添加到项目根文件夹中(同样通过Add -〉New Item),再次保存设置,编译项目,您将在输出文件夹中找到一个.dll.config文件。您现在可以像以前一样更改默认的app值。
使用Visual Studio 1.16.3.5和.net核心3.0 WPF项目进行测试。
dgenwo3n2#
正如你在文章中所指出的,Microsoft.Extensions.Configuration API是为你的应用设置的一次性应用,或者至少是只读的。如果你的主要目标是简单/快速/简单地保存用户设置,你可以自己做一些事情。将设置存储在
ApplicationData
文件夹中,类似于旧的API。使用最基本
UserSettings
的演示我不会提供一个完整的MVVM示例,但内存中仍有一个示例,ref
_userSettings
。一旦您加载设置,演示程序将覆盖其默认属性。当然,在生产环境中,您不会在启动时提供默认值。这只是出于说明的目的。XAML语言
bkkx9g8r3#
您可以使用Nuget包System.Configuration.ConfigurationManager。它与.Net Standard 2.0兼容,因此应该可以在.Net Core应用程序中使用。
没有设计器来实现这个功能,但是除此之外,它的工作方式与.Net版本相同,并且您应该能够从
Settings.Designer.cs
复制代码。此外,您可以重写OnPropertyChanged
,因此不需要调用Save
。下面是一个示例,来自正在工作的.Net Standard项目:
km0tfn4u4#
用于Wpf网络核心
项目单击鼠标右键-〉添加新项-〉设置文件(常规)
用途
"设置1“创建文件名的位置
双击“Settings1.settings”文件并编辑
8oomwypt5#
我对公认答案的改进被拒绝了,所以在这里作为单独的答案。
不需要任何nuget包,也不需要滚动自己的JSON等。
默认情况下,在创建新的.NET Core或.NET5/6项目时,设置部分会丢失,您必须手动添加它。
只需在解决方案中手动创建Properties文件夹。当您将新文件夹命名为
Properties
时,您会看到文件夹图标会略有变化。右键单击此新的Properties文件夹并添加New Item
添加一个设置文件,并将建议名称从
Settings1.settings
重命名为Settings.settings
,使其与旧项目中的名称相同给你。设置已经恢复了。
您可以添加应用程序配置文件以获取输出目录中的.config文件
wko9yo5t6#
基于Funk的answer,这里有一个抽象的通用singleton风格的变体,它删除了一些关于SettingsManager的管理,并使创建和使用附加设置类尽可能简单:
键入的设置类:
用法:
正如您所看到的,要创建和使用设置的线的数量也是最少的,并且由于没有参数,因此更严格一些。
基类定义存储设置的位置,并且每个MySettings子类只允许一个设置文件-程序集和类名确定其位置。对于替换属性文件的目的,这就足够了。
在禁用settings子类的构造函数和创建
SettingsManager<T>.Instance
而不使用Load()时可能会进行一些改进;这取决于您自己的用例。sqougxex7#
只需双击项目中的
Settings.settings
文件。它仍然会像以前一样在设计器中打开。只是它不再列在“属性”窗口中。