Централизованные настройки в C # для нескольких программ - PullRequest
5 голосов
/ 26 ноября 2009

Мне недавно дали кучу программ для обслуживания, и я пытаюсь найти некоторую помощь во внедрении некоторых лучших практик. По сути, это три независимых программного обеспечения, которые используют общую библиотеку DLL для управления серией настроек, которыми все приложения совместно пользуются. DLL работает следующим образом: она заменяет файл пользовательских настроек (XML-файл, скрытый глубоко в папке настроек пользователя в Windows), на файл исправления, указанный жестко закодированным (egad!) Путем.

Обоснование сохранения его как пользовательских настроек , а не настроек приложения, заключается в том, что DLL можно найти в нескольких местах (по одному для каждого приложения, которое будет ее использовать), и поэтому файл пользовательских настроек является общим (если все копии библиотеки DLL скомпилированы одинаково), тогда как при использовании настройки приложения будет столько же файлов app.config, сколько копий библиотеки DLL.

Я пытаюсь придумать лучший способ централизовать эти конфигурации и положить конец бессмысленному обмену файлами. Один из подходов (на самом деле, скорее всего, самый лучший) заключается в перепроектировании всех трех приложений, чтобы они все использовали центральную библиотеку DLL со своим собственным «app.config». Есть ли другие рекомендуемые места?

Ответы [ 4 ]

7 голосов
/ 26 ноября 2009

Рассматривали ли вы использование реестра Windows? Мы все ненавидим это, но, возможно, это лучший вариант в этом случае, поскольку он централизован, и вы можете легко обмениваться настройками между приложениями.

РЕДАКТИРОВАТЬ : если вам не нравится реестр (и я не виню вас за это), вы можете создать XML или другой файл конфигурации в каталоге в специальной папке Application Data , Вот как это делается в наши дни, насколько я знаю.

string appData = Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData));
string folder = "MyApplicationName";
string fileName = "settings.xml";
string path = Path.Combine(Path.Combine(appData, folder), fileName);
2 голосов
/ 26 ноября 2009

Вы можете использовать настройки в общем файле - скорее всего, они хранятся в AppData в папке пользовательских настроек

Преимущество здесь в том, что вам не нужно изменять какой-либо код.

Приложение будет хранить свои настройки в своем обычном конфигурационном файле и обращаться к общему файлу для настроек dll:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="commondll.config">
    <add key="KeyToOverride" value="Original" />
    <add key="KeyToNotOverride" value="Standard" />
  </appSettings>
</configuration>

затем в общем файле commondll.config:

<appSettings>
  <add key="KeyToOverride" value="Overridden" />
  <add key="KeyToBeAdded" value="EntirelyNew" />
</appSettings>
2 голосов
/ 26 ноября 2009

Для этой конкретной проблемы, если это DLL-библиотека .Net, вы можете использовать GAC , это централизует вашу DLL. Все программное обеспечение будет знать, где они могут получить доступ к этой DLL. И таким образом, вы могли бы сделать меньше рефакторинга .

Это всего лишь патч для только эта проблема . Я бы не рекомендовал это для новых разработок.

GAC в Википедии

0 голосов
/ 26 ноября 2009
...