我正在使用Windows Forms,.NET 4.6编写一个应用程序,使用一组可在运行时配置的设置。修改,添加和删除设置在一次运行中运行良好,但在应用关闭时所有更改都将丢失。我在主窗口关闭之前使用了Properties.Settings.Default.Save():
private void TestersList_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.Save();
}
在AppData中按预期创建了user.config文件,但只保存了其中一个设置,无论我使用它做什么或运行时的任何其他设置。
所有设置都在用户范围内定义,并序列化为字符串。我没有看到任何使得与其他人保存不同的人。 以下是app.config的一部分:
<userSettings>
<DailyChecklist.Properties.Settings>
<setting name="SerialPattern2" serializeAs="String">
<value>\d{10}_0_None</value>
</setting>
</setting>
<setting name="SerialPatternDebug" serializeAs="String">
<value>123456789</value>
</setting>
<setting name="TestersToIgnore" serializeAs="String">
<value>dummy;</value>
</setting>
<setting name="SerialPatternDefault" serializeAs="String">
<value>\D\d]{3}\D{2,3}\d{4}\d{5}</value>
</setting>
<setting name="ServerAdress" serializeAs="String">
<value>address/goes/here</value>
</setting>
</DailyChecklist.Properties.Settings>
</userSettings>
保存后我在user.config中得到了这个:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<DailyChecklist.Properties.Settings>
<setting name="TestersToIgnore" serializeAs="String">
<value>dummy;</value>
</setting>
</DailyChecklist.Properties.Settings>
</userSettings>
</configuration>
如何保存user.config中的所有设置?
提前致谢!
PS。我已经检查过它不是范围,我在汇编信息中没有'*',我监控的文件是唯一创建的文件(没有版本/内部版本号更改)。它被修改(根据notepad ++),如果我更改了TestersToIgnore,它的新值将被保存,但所有其他设置都将丢失。
答案 0 :(得分:0)
foreach
。
虽然可以在Properties.Settings.Default.Properties
循环中迭代foreach
,但更改是暂时的。我的意思是解决方案:
foreach(SettingsProperty setting in Properties.Settings.Default.Properties)
{
if(setting.Name.Contains("someKeyWord"))
Properties.Settings.Default[setting.Name] = someNewSettingValue;
}
似乎在当前运行中正常工作,但重启后更改会丢失。由于某种原因,Properties.Settings.Default.Save()
无法保存从循环中更改的所有内容。
我检查了Properties.Settings.Default[setting.Name] = someNewSettingValue;
在循环之外正常工作,然后通常会保存。
如果您需要动态添加设置,请考虑使用配置为System.Collections.Specialized
类型之一的单个设置。它可能会使您的代码不那么透明,但至少它可以很好地处理循环。