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

时间:2012-02-21 18:33:45

标签: c# mono settings

我有一个项目被移植到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-runtime v2.10.8
  • Visual Studio 2008 Professional

1 个答案:

答案 0 :(得分:0)

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

(从未在单声道下测试)

写入dll的配置文件:

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