【问题标题】:Application Settings for Multiple C# Libraries in Mono (Linux)Mono (Linux) 中多个 C# 库的应用程序设置
【发布时间】:2012-02-21 18:33:44
【问题描述】:

我有一个项目正在移植到 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
  • 单运行时 v2.10.8
  • Visual Studio 2008 专业版

【问题讨论】:

  • 如果您有使用或具有相同名称的库..您是否考虑过完全限定命名空间或更好的别名..?
  • @DJ KRAZE - 如果我理解你的建议,我想我可能误导了你。没有一个库具有相同的名称,但它们的应用程序设置可能。

标签: c# mono settings


【解决方案1】:

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

(从未在单声道下测试过)

写入 dll 的配置文件:

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

【讨论】:

  • 不幸的是,这在 Mono 中不起作用。应用程序仍会写入 ~/.local/share 下的单个 .config 文件,并且不会更改程序集本地的 *.config 文件。不过是个好主意。
  • @walkingTarget:您可以使用 SaveAs 并使用 "MyDLL.dll.config" 保存,而不是使用 Save 方法保存?您可以制作一个扩展方法“保存”,并在此方法中使用反射来检索程序集名称(调用程序集,而不是当前程序集),然后使用 SaveAs 保存配置。这样你就有了保存在 dll 配置文件中的方法
  • 扩展方法为解决方案打开了许多大门。谢谢你的建议。如果您可以将该信息添加到您的答案中,我会奖励您。
  • 完成,谢谢。很高兴能帮到你。
猜你喜欢
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多