2016-12-02 14 views
0

У меня есть набор приложений, в которых я хочу поделиться настройками приложений. Назовем их App1, App2 и App3Как я могу совместно использовать общую конфигурацию пользователя (settings.settings) из общей сборки без каждого приложения, сохраняющего обновления в своей собственной папке?

Я создал общий проект в отдельном пространстве имен и обработал получение и настройку значений пользовательских конфигураций в этом проекте. Я использовал вкладку «Параметры» в свойствах этого проекта для создания значений пользовательских настроек.

Например, в статическом Configuration класса в MyCommon пространства имен, у меня есть эти методы:

public static Config PopulateConfig() 
{ 
    // Config is a simple class containing values pulled from the user config 
    Config result = new Config(); 
    try { 
    result.ImportArchiveFolder = MyCommon.Properties.Settings.Default.ArchiveFolder; 
    result.ReportFolder = MyCommon.Properties.Settings.Default.ReportFolder; 
    } 
    catch (Exception ex) { 
    MessageBox.Show("Error loading configuration: " + ex.Message, 
        "Configuration error", 
        MessageBoxButtons.OK, 
        MessageBoxIcon.Error); 
    } 
    return result; 
} 

public static void SaveConfig(Config config) 
{ 
    try { 
    if (config.ImportArchiveFolder != MyCommon.Properties.Settings.Default.ArchiveFolder) { 
    MyCommon.Properties.Settings.Default.ArchiveFolder = config.ImportArchiveFolder; 
    } 
    if (config.ReportArchiveFolder != MyCommon.Properties.Settings.Default. ReportFolder) { 
    MyCommon.Properties.Settings.Default.ReportFolder = config.ReportArchiveFolder; 
    } 
    MyCommon.Properties.Settings.Default.Save(); 
    } 
    catch (Exception ex) { 
    MessageBox.Show("Error saving configuration: " + ex.Message, 
        "Configuration error", 
        MessageBoxButtons.OK, 
        MessageBoxIcon.Error); 
    } 
} 

Хотя это работает, чтобы иметь возможность читать и сохранять эти значения он сохраняет их под именем отдельного EXE, такие как App2, а не MyCommon в профиле пользователя AppData.

Username\AppData\MyCompany\App1_Url_randomString\V1.0.1.0\user.config 
Username\AppData\MyCompany\App2_Url_randomString\V1.0.1.0\user.config 

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

Я думаю, что мне нужно знать, где, чтобы сказать ему, чтобы поместить эту общую конфигурацию я хотел бы видеть его удалось автоматически в папке AppData, но я не знаю, как определить «Специальная папка», которая отражает версия сборной сборки. Я хочу, чтобы конфигурация соответствовала общему проекту.

Файловая структура должна быть что-то вроде этого

Username\AppData\MyCompany\MyCommon_Url_randomString\V1.0.1.0\user.config 

Хорошая вещь о ConfigurationManager является то, что если я изменить версию сборки он будет читать предыдущие значения и создать новую папку с теми, так что я могу запустить обе версии программы с независимым учетом их конфигураций. Я хотел бы сохранить это в этом общем сценарии.

Username\AppData\MyCompany\MyCommon_Url_randomString\V1.0.1.0\user.config 
                \V1.0.1.1\user.config 

ответ

0

В результате я использовал реестр с настройками в качестве начальных значений по умолчанию.

Общие программы использовали реестр для настроек. Когда программа запустится, будет видно, есть ли какие-либо настройки в общем реестре, и если это так, они будут использовать их. Если нет, он будет использовать собственный файл настроек для значений по умолчанию.

Редактор параметров позволяет администратору редактировать параметры для всех общих приложений, сохраняя все настройки в общей папке реестра.