Mono(Linux)中多个C#库的应用程序设置

本文关键字:应用程序 设置 Linux Mono | 更新日期: 2023-09-27 18:25:32

我有一个项目正在移植到Mono下的Linux上。该项目包括多个C#库,它们有自己的用户范围的应用程序设置(通过VS2008自动生成)。最终,该项目将在Windows中的.NET和Ubuntu 10.04中的Mono上运行。

在Windows中操作时,应用程序设置存储在单个user.config文件中,每个库都有单独的配置节:

<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="UserSettingsGroup ...>
      <section name="LibFoo.Properties.Settings" type="ClientSettingsSection ... />
      <section name="LibBar.Properties.Settings" type="ClientSettingsSection ... />
    </sectionGroup>
  </configSections>
  <userSettings>
    <LibFoo.Properties.Settings>
      <setting name="strFoo" serializeAs="String">
        <value>An example string value.</value>
      </setting>
    </LibFoo.Properties.Settings>
    <LibBar.Properties.Settings>
      <setting name="strBar" serializeAs="String">
        <value>An example string value.</value>
      </setting>
    </LibBar.Properties.Settings>
  </userSettings>
</configuration>

在Ubuntu中,创建了一个user.config,但是,我发现无论哪个库首先调用Properties.Settings.Save(),都只创建了一部分,所有库都使用同一部分:

<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="UserSettingsGroup ... >
      <section name="LibFoo.Properties.Settings" type="ClientSettingsSection ... />
    </sectionGroup>
  </configSections>
  <userSettings>
    <LibFoo.Properties.Settings>
      <setting name="strFoo" serializeAs="String">
        <value>An example string value.</value>
      </setting>
      <setting name="strBar" serializeAs="String">
        <value>An example string value.</value>
      </setting>
    </LibFoo.Properties.Settings>
  </userSettings>
</configuration>

当库之间的设置具有相同名称时,这将变得特别麻烦。

这是Mono中的一个错误吗?还是我需要为Mono更改一些内容来为我的库的设置生成单独的部分?

  • Ubuntu v10.04
  • mono运行时v2.10.8
  • Visual Studio 2008专业版

Mono(Linux)中多个C#库的应用程序设置

为了避免相同的配置名称问题,可以尝试将配置设置放在每个DLL的配置文件中。您的配置文件需要名称为"MyDLL.dll.config"(假设您的dll名为"MyDLL.dll"),并且与dll位于同一文件夹中。

(从未在单声道下测试)

写入dll的配置文件:

您可以将Extension方法设置为"Save",并在此方法中使用反射来检索程序集名称(调用程序集,而不是当前程序集),然后使用SaveAs来保存配置。这样你就有了一个保存在dll配置文件中的方法。