Mono не может сохранить пользовательские настройки
У меня проблемы с сохранением пользовательских настроек на Mono (Ubuntu). Вот пример кода:
private void Form1_Load(object sender, EventArgs e)
{
string savedText = Properties.Settings.Default.tbText.ToString();
tbInput.Text = savedText;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
string textToSave = tbInput.Text;
Properties.Settings.Default.tbText = textToSave;
Properties.Settings.Default.tbText = Properties.Settings.Default.tbText;
Properties.Settings.Default.Save();
}
Но я получаю только пустой конфиг, как
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings />
</configuration>
Я уже пробовал что-то вроде
Properties.Settings.Default.tbText = Properties.Settings.Default.tbText;
отсюда Но все же получить тот же результат. Как я могу использовать настройки в Mono?
1 ответ
Удалить строку
Properties.Settings.Default.tbText = Properties.Settings.Default.tbText;
Проверьте ваш файл конфигурации приложения. Вероятно, у вас есть что-то вроде этого:
<configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="ExampleApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> ... <appSettings> <add key="TestKey1" value="Test1" /> <add key="TestKey2" value="Test2" /> </appSettings> ... <userSettings> <ExampleApp.Properties.Settings> <setting name="textBox1" serializeAs="String"> <value /> </setting> </ExampleApp.Properties.Settings> </userSettings> </configuration>
Удалить раздел Group для пользовательских настроек.
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="ExampleApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup>
Удалите также раздел userSettings.
<userSettings> ... </userSettings>
Удалите свой локальный user.config. После первого запуска он будет воссоздан правильно.
Он должен работать
У меня были проблемы с этим, и советы PiKos мне не помогли. Мой был таким же, как и вы:
У меня был AppName.exe.config рядом с моим AppName.exe, и в нем были такие данные, как:
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="AppName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<AppName.Properties.Settings>
<setting name="X" serializeAs="String">
<value>0</value>
</setting>
</AppName.Properties.Settings>
</userSettings>
У меня был ~/.local/share/CompanyName/AppName_4309857324572934859834/user.config
что так же эффективно пусто:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<userSettings />
</configuration>
Обратите внимание, что это sectionGroup
не имеет детей, кроме одного в AppName.exe.config
сделал
Решением для меня было вырезать соответствующие <sectiongroup>
плюс его ребенок, а также <userSettings>
снаружи AppName.exe.config
и вставьте их в пустой user.config
Похоже, моно ожидает, что они будут только в одном месте. Если они вappname.exe.cofnig
вы получите пустой user.config. Если они находятся в user.config, они будут обновлены там при вызове Save(). Обратной стороной этого, как мне кажется, является то, что, если user.config когда-либо будет поврежден, нигде не будет никаких настроек по умолчанию (я попробовал совет PiKos удалить их изAppName.exe.config
а также удалите user.config и перезапустите приложение; user.config был создан со всеми именами настроек, но все значения были нулевыми)