2012-02-21 1 views
3

У меня есть проект, который портируется для работы в Linux под Mono. Проект включает в себя несколько библиотек C#, которые имеют собственные настройки приложения (сгенерированные автоматически через VS2008). В конце концов, проект будет запущен на .NET в Windows и Mono в Ubuntu 10.04.Параметры приложения для нескольких библиотек C# в моно (Linux)

При работе в 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 Professional
+0

если у вас есть Библиотеки, которые потребляют или имеют одно и то же имя .. вы подумали о полной квалификации пространства имен или даже лучше слияния.? – MethodMan

+0

@ DJ KRAZE - Если я понимаю ваше предложение, я думаю, что, возможно, вас ввели в заблуждение. Ни одна из библиотек не имеет то же имя, но их параметры приложения могут быть. – walkingTarget

ответ

0

Чтобы избежать подобной проблемы, имя конфигурации, вы можете попытаться поставить параметры конфигурации в config для каждой DLL. В вашем файле конфигурации должно быть указано имя «MyDLL.dll.config» (предполагается, что ваша DLL называется «MyDLL.dll») и находиться в той же папке, что и DLL.

(никогда не испытывали в моно)

Для записи в файлах конфигурации библиотеки DLL:

Вы можете сделать метод расширения «Сохранить», и в этом использовать метод отражения для извлечения имени сборки (Calling сборки, не текущая сборка), затем используйте SaveAs для сохранения конфигурации. Таким образом, у вас есть способ сохранить файлы конфигурации dll.

+0

К сожалению, это не работает в Mono. Приложение по-прежнему записывает в один файл .config в ~/.local/share и не меняет файлы * .config, локальные для сборки. Хорошая идея. – walkingTarget

+0

@walkingTarget: вместо сохранения с помощью метода Save вы могли бы использовать SaveAs и сохранить с помощью «MyDLL.dll.config»? Вы можете сделать метод расширения «Сохранить», и в этом методе используйте отражение, чтобы получить имя сборки (Calling assembly, а не текущую сборку), затем используйте SaveAs для сохранения конфигурации. Таким образом, у вас есть способ сохранения в конфигурационных файлах dll. – Fabske

+0

. Метод расширения открыл много дверей для решения обходного решения. Спасибо за предложение. Если бы вы могли добавить эту информацию к своему ответу, я награжу вас щедростью. – walkingTarget

Смежные вопросы