2016-11-24 2 views
1

Здесь у нас есть настольное приложение winforms, используемое различными пользователями. Каждый пользователь запускает приложение локально. Тем не менее, папки сборки являются отдельными для каждого пользователя. У них также есть другой набор ключей конфигурации под их локальными конфигурационными файлами приложения для запуска приложения (разные строки подключения и ключевые параметры). Вы можете догадаться, насколько болезненны версии обновлений.Отдельные файлы конфигурации для отдельных пользователей

Моя цель - разместить это настольное приложение winforms в общей папке и поделиться им с каждым пользователем. Задача здесь состоит в том, что их конфигурации являются отдельными.

Я попытался объединить отдельные ключи с разными именами и использовать условия под кодом, но работа кажется массивной.

Есть ли способ собрать все эти отдельные файлы конфигурации под папкой bin и переключиться между ними в зависимости от имени пользователя? Какой самый простой способ подходит к этой проблеме?

спасибо.

+0

Приложение использует соединение с базой данных? Было бы хорошо настроить все пользовательские значения в таблице центральной базы данных и отобразить их при инициализации вашего приложения. –

+0

Я предлагаю портативную базу данных SQLite, чтобы в таком случае сохранить настройки для каждого пользователя. Примечание. Приложению требуется разрешение доступа для чтения базы данных SQLite для записи. – GauravKP

+0

@SouvikGhosh благодарит за ваше предложение. Даже клавиши DB имеют разные значения из-за разных драйверов подключений на один компьютер, поэтому это может быть не лучший подход. –

ответ

0

Мое предложение состоит в использовании модифицированного механизма настроек .NET. В общем, вы можете иметь специфичные для приложения и пользовательские настройки. В этом случае мы хотели бы использовать пользовательские настройки.

Проблема этого подхода заключается в том, что пользовательские настройки не сохраняются в папке бин, но где-то есть % USERPROFILE% \ AppData \ Local ... (here являются детали). Однако вы можете переопределить это поведение, написав поставщика настраиваемых параметров. К счастью, кто-то уже это сделал. CustomSettingsProvider из этого answer работает как шарм.

Подведем здесь решение:

  • Для того, чтобы добавить файл настроек вам проецировать правой кнопкой мыши проект , а затем выберите Добавить -> Новый пункт ... Finnally, найти Файл настроек шаблон. Если вы дважды щелкните по добавленному файлу, появится дизайнер. Предположим, что этот файл называется MySettings.
  • Определите некоторые пользовательские настройки.

  • Добавить CustomSettingsProvider в проект.

  • Найти MySettings класс в проекте и добавить следующий атрибут к нему:

[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))].

  • Перед использованием настроек вы должны указать путь к файлу с ними. Я предлагаю сделать это как одну из первых вещей в вашем приложении. В следующем примере файлы настроек создаются в текущей папке и их имена будут содержать имя пользователя:

MySettings.Default.SettingsKey = [email protected]".\user_{Environment.UserName}.config";

  • Если файл с настройками не существует CustomSettingsProvider создаст пустую.
  • При закрытии заявки на вызов MySettings.Default.Save();, чтобы сохранить пользовательские настройки в файле.
  • Запустите приложение один раз самостоятельно, чтобы создать файл шаблона. Затем создайте копию этого шаблона для других пользователей, соответственно изменив их имена.
  • Недостаток моего подхода заключается в том, что в файле настроек не будет раздела строк подключений. Поэтому ссылку на ConfigurationManager.ConnectionStrings вам нужно будет заменить на ссылки на MySettings.PropertyWithConnectionString.
+0

Благодарим вас за подробное предложение. Я попробую этот подход. Я буду держать вас в курсе и принять решение о соответствующем ответе. –

+0

Я придерживался другого подхода. Я не прошел эти шаги. Я приму ответ за ваши усилия. Спасибо. –

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