У меня есть набор приложений, в которых я хочу поделиться настройками приложений. Назовем их 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