Новая сборка Windows C# приводит к тому, что приложение теряет сохраненные настройки

Каждый раз, когда я перекомпилирую свое приложение Windows, я обновляю AssemblyVersion и AssemblyFileVersion в AssemblyInfo.cs.

Когда мое приложение загружается, я звоню

Microsoft.Win32.RegistryKey key1 = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Classes\\MyFileType\\shell\\open\\command", true);
           if (key1 == null)
           {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\MyFileType\shell\open\command", null, "\"" + Application.ExecutablePath + "\"" + " \"%1\"");
                flag = true;
            }
            Microsoft.Win32.RegistryKey key2 = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Classes\\.abc", true);
            if (key2 == null)
            {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.abc", null, "MyFileType");
                flag = true;
            }
            Microsoft.Win32.RegistryKey key3 = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Classes\\MyFileType\\DefaultIcon", true);
            if (key3 == null)
            {
                   Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\MyFileType\DefaultIcon", "", Application.ExecutablePath + ",2");
                   flag = true;
            }
if (flag) SHChangeNotify(0x08000000, 0x0000, (IntPtr)null, (IntPtr)null);//SHCNE_ASSOCCHANGED SHCNF_IDLIST  

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

Есть идеи, что заставляет приложение терять свои предпочтения? Это потому что я обновляю номер версии? Если так, как я могу обойти это?

Это потому что я заново вставляю ключи реестра?

Что бы это могло быть?

РЕДАКТИРОВАТЬ

Настройки загружаются и сохраняются между экземплярами запущенного приложения, пока я не сделаю новую сборку... но вот код в любом случае:

 private void SaveSettings()
    {
        Properties.Settings.Default.useLastB = this.lastB.Checked;
        Properties.Settings.Default.useLast2B = this.last2B.Checked;
        Properties.Settings.Default.useLast3B = this.last3B.Checked;
        Properties.Settings.Default.useLastSV = this.lastSV.Checked;
        Properties.Settings.Default.useLast2SV = this.last2SV.Checked;
        Properties.Settings.Default.useLast3SV = this.last3SV.Checked;
        Properties.Settings.Default.showAverage = this.averageBox.Checked;
        Properties.Settings.Default.showSum = this.sumBox.Checked;
        Properties.Settings.Default.showNormalized = this.normalBox.Checked;
        Properties.Settings.Default.pessimistic = this.pessimistic.Checked;
        Properties.Settings.Default.realistic = this.realistic.Checked;
        Properties.Settings.Default.optimistic = this.optimistic.Checked;
        Properties.Settings.Default.useAinsley = this.ainsleyBox.Checked;
        Properties.Settings.Default.useHandicapper = this.handicapperBox.Checked;
        Properties.Settings.Default.useCustom = this.customBox.Checked;
        Properties.Settings.Default.UseMorningLine = this.useMLBox.Checked;
        Properties.Settings.Default.SolveAllRacesToSingleFile = this.singleFileCheckBox.Checked;

        Properties.Settings.Default.Save();
    }

    private void LoadSettings()
    {
        Properties.Settings.Default.Reload();
        this.lastB.Checked = Properties.Settings.Default.useLastB;
        this.last2B.Checked = Properties.Settings.Default.useLast2B;
        this.last3B.Checked = Properties.Settings.Default.useLast3B;
        this.lastSV.Checked = Properties.Settings.Default.useLastSV;
        this.last2SV.Checked = Properties.Settings.Default.useLast2SV;
        this.last3SV.Checked = Properties.Settings.Default.useLast3SV;
        this.averageBox.Checked = Properties.Settings.Default.showAverage;
        this.sumBox.Checked = Properties.Settings.Default.showSum;
        this.normalBox.Checked = Properties.Settings.Default.showNormalized;
        this.pessimistic.Checked = Properties.Settings.Default.pessimistic;
        this.realistic.Checked = Properties.Settings.Default.realistic;
        this.optimistic.Checked = Properties.Settings.Default.optimistic;
        this.handicapperBox.Checked = Properties.Settings.Default.useHandicapper;
        this.ainsleyBox.Checked = Properties.Settings.Default.useAinsley;
        this.customBox.Checked = Properties.Settings.Default.useCustom;
        this.useMLBox.Checked = Properties.Settings.Default.UseMorningLine;
        this.singleFileCheckBox.Checked = Properties.Settings.Default.SolveAllRacesToSingleFile;
    }

Спасибо

1 ответ

Решение

Расположение по умолчанию для параметров приложения - это путь:

%USERPROFILE%\Local Settings\Application Data\<Company Name>\<appdomainname>_<eid>_<hash>\<verison>\user.config

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

Вы можете переопределить, где это хранится, чтобы удалить зависимость от версии в пути - см. Архитектура настроек приложения

Другие вопросы по тегам