Mono 无法保存用户设置
Mono can't save user settings
我在 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;
来自 here。但仍然得到相同的结果。如何在 Mono 中使用设置?
删除行
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>
删除 userSettings 的部分组。
<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 旁边有一个 AppName.exe.config,它的数据如下:
<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
没有 children,但 AppName.exe.config
中的
我的解决方案是从 AppName.exe.config
中剪切相关的 <sectiongroup>
及其 child 以及 <userSettings>
并将它们粘贴到空的 [=18] =]
似乎 mono 希望它们只在一个地方。如果它们在 appname.exe.cofnig
中,您将得到一个空的 user.config。如果它们在 user.config 中,它们将在调用 Save() 时更新。我认为,这样做的缺点是,如果 user.config 曾经损坏,任何地方都没有任何默认设置(我尝试了 PiKos 的建议,将它们从 AppName.exe.config
中删除并删除 user.config 然后重新启动他的应用程序;user.config 是使用所有设置名称创建的,但所有值都是空的)
我在 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;
来自 here。但仍然得到相同的结果。如何在 Mono 中使用设置?
删除行
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>
删除 userSettings 的部分组。
<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 旁边有一个 AppName.exe.config,它的数据如下:
<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
没有 children,但 AppName.exe.config
中的
我的解决方案是从 AppName.exe.config
中剪切相关的 <sectiongroup>
及其 child 以及 <userSettings>
并将它们粘贴到空的 [=18] =]
似乎 mono 希望它们只在一个地方。如果它们在 appname.exe.cofnig
中,您将得到一个空的 user.config。如果它们在 user.config 中,它们将在调用 Save() 时更新。我认为,这样做的缺点是,如果 user.config 曾经损坏,任何地方都没有任何默认设置(我尝试了 PiKos 的建议,将它们从 AppName.exe.config
中删除并删除 user.config 然后重新启动他的应用程序;user.config 是使用所有设置名称创建的,但所有值都是空的)