sortgnz Ответов: 2

Обновление пользовательских настроек внешней библиотеки DLL


Привет!

У меня есть одно основное приложение (лаунчер) и библиотека, содержащая все элементы управления пользовательским интерфейсом.

Когда я запускаю главное приложение (.exe) Я пытаюсь обновить пользовательские настройки dll вызывая этот метод:

public static void CheckForUpgrade()
{
если (Settings1.Умолчанию.UpdateSettings)
{
Settings1.Умолчанию.Обновлять();
Settings1.Умолчанию.UpdateSettings = false;
Settings1.Умолчанию.Сохранить();
}
}

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

Есть ли в любом случае обновить настройки dll, чтобы их не было в основной (исполняющей) сборке?

Что я уже пробовал:

Попытался вызвать этот метод из основного приложения. Он определен во внешней библиотеке dll в статическом классе (SettingsManager)

public static void CheckForUpgrade()
{
  if (Settings1.Default.UpdateSettings)
  {
    Settings1.Default.Upgrade();
    Settings1.Default.UpdateSettings = false;
    Settings1.Default.Save();                    
  }
}

2 Ответов

Рейтинг:
2

OriginalGriff

Для начала вам нужно сделать две вещи:
1) Смотрите на код, который вы вызываете, а не на код, который его вызывает. Код, который вы показываете, тривиален - вам нужно посмотреть, что на самом деле делает метод обновления.
2) Используйте отладчик, чтобы проверить, что вызывается метод CheckForUpgrade, и перейдите к методам обновления и сохранения, чтобы точно узнать, что они делают. Пока они это делают, проверьте файлы, которые, по вашему мнению, они должны обновлять (или базы данных, если они их используют), и убедитесь, что изменения идут туда, куда вы ожидаете.

Извините, но мы ничего не можем сделать для вас!


sortgnz

Привет OriginalGriff:

Как я уже сказал, журналы говорят мне, что Settings1.Default.Обновление() называется.
Но upgrade () - это .net framework, а не пользовательский код, реализованный мной самим. (Система.Конфигурация.Свойство applicationsettingsbase)

Я читал, что обновление настроек-это одна из первых вещей, которые нужно сделать при выпуске новой сборки.
Если другой фрагмент кода ищет настройки 1 перед попыткой обновления, обновление завершается неудачей. Но это первая линия основной рутины.

Спасибо за ваш ответ. Извините за мой английский. Первый раз публикую вопрос, как вы можете видеть..

sortgnz

Переопределяя Upgrade (), я вижу проблему.
Итерация всех значений Settingsproperty и получение previosversion всегда возвращает null.

общественного переопределить недействительными обновить()
{

foreach (System.Конфигурация.SettingsPropertyValue свойство в этом.PropertyValues)
{
пробовать
{
объект PreviousValue = this.GetPreviousVersion(property.Name);

если (это.Значения свойств[property.Name] != null)
{
этот.Значения свойств[property.Name].Значениесвойства = PreviousValue;

}
}
улов (система.Исключение экс)
{
LogManager.LogManager.Log.Error(строка.Формат("ошибка обновления настройки : {0}", property.Name), экс);
}
}

//база.Обновлять();
}
}

Рейтинг:
1

sortgnz

Нашел обходной путь здесь:

c# - ApplicationSettingsBase.Обновить() не обновлении пользовательские настройки после перекомпиляции с .Net версии 4.0 - переполнение стека [^]

Я думаю, что проблема заключается в совпадении пользовательских настроек, связанных с различными версиями выпуска/отладки. (номера версий не коррелируют, и обновление не знает, как решить эту проблему)

Очистка перед тестированием этой функции может решить эту проблему.