繁体   English   中英

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;

这里 但仍然得到相同的结果。 如何在 Mono 中使用设置?

  1. 删除线

    Properties.Settings.Default.tbText = Properties.Settings.Default.tbText;
  2. 检查您的应用程序配置文件。 可能你有这样的事情:

     <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

     <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>
  3. 删除您的本地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没有子项,但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 是使用所有设置名称创建的,但所有值都为空)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM