我有一个项目被移植到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更改某些内容以为我的库设置生成单独的部分?
答案 0 :(得分:0)
要避免相同的配置名称问题,您可以尝试将配置设置放在每个DLL的配置文件中。您的配置文件需要具有名称“MyDLL.dll.config”(假设您的DLL名为“MyDLL.dll”)并且与DLL位于同一文件夹中。
(从未在单声道下测试)
写入dll的配置文件:
您可以将Extension方法设置为“Save”,并在此方法中使用反射来检索程序集名称(调用程序集,而不是当前程序集),然后使用SaveAs保存配置。这样你就有了一种保存在dll配置文件中的方法。