ConfigurationManager не сохраняет настройки

Вот код, который я использую:

private void SaveConfiguration() { if (txtUsername.Text != "" && txtPassword.Text != "") { ConfigurationManager.AppSettings["Username"] = txtUsername.Text; ConfigurationManager.AppSettings["Password"] = txtPassword.Text; MessageBox.Show("Su configuracion guardo exitosamente.", "Exito!"); this.Close(); } else { MessageBox.Show("Por favor lleno los campos.", "Error."); } } 

Теперь настройки сохраняются, но когда я закрываю приложение и нажимаю F5, чтобы снова запустить его, значения возвращаются к тому, что вводится в файл app.config. Какие-либо предложения?

Я думаю, вы должны вызвать метод Save

 ConfigurationManager.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); 

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

Чтобы иметь возможность сохранять, вам нужно использовать объект конфигурации, возвращаемый методом OpenExeConfiguration

 //Create the object Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //make changes config.AppSettings.Settings["Username"].Value = txtUsername.Text; config.AppSettings.Settings["Password"].Value = txtPassword.Text; //save to apply changes config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); 

Дополнительные ссылки здесь: ConfigurationManager Class

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

  • ваш код скомпилирован,
  • исполняемый файл копируется в подкаталог bin или bin\Debug каталога исходного кода,
  • ваш app.config будет скопирован как yourexecutable.exe.config в этот каталог и
  • ваш исполняемый файл запускается в этом каталоге.

Таким образом, ваше приложение использует yourexecutable.exe.config в yourexecutable.exe.config bin или bin\Debug , и именно там ConfigurationManager сохраняет изменения, а не в вашем каталоге исходного кода. Это не будет проблемой после развертывания вашего приложения, потому что тогда изменения перейдут в yourexecutable.exe.config в каталоге развертывания, который вы хотите.

В дополнение к комментарию Аппетира о втором ответе:

Также обратите внимание, что если вы отлаживаете (и не отключили процесс vshost), то, когда ваше приложение останавливается, yourexecutable.vshost.exe.config будет заменен на yourexecutable.exe.config снова.

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

Это очень сбивает с толку, если вы отлаживаете программу, которая ищет настройку и, если не присутствует, записывает ее. Даже если вам предостерегают от ожидания того, что настройка будет там во второй раз, когда вы запустите программу, можно ожидать, что она будет там ПОСЛЕ первого запуска программы и ПЕРЕД вторым запуском … увы!

Это не о чем беспокоиться, поскольку все это просто работает, когда приложение развертывается или запускается непосредственно из bin, как уже указывали другие …

Но можно попасть в «ловушку», хотя если вы отлаживаете свою программу и решаете использовать настройки приложения в первый раз, и, чтобы избежать ручной записи XML, вы решили, что начнете с кода и получите программу напишите настройку … чтобы получить все это, тогда, возможно, добавьте еще несколько.

  • Программно получить номер версии DLL
  • Что означает «unsigned temp: 3» в структуре или объединении?
  • Моделирование базы данных полиморфных ассоциаций - сначала против первого кода
  • Преобразование многомерных массивов в указатели в c ++
  • Как подождать, пока stream завершится с .NET?
  • Можно ли получить доступ к памяти локальной переменной за пределами ее объема?
  • Завершение работы Visual Studio C #
  • GMail SMTP через ошибки C # .Net во всех портах
  • Почему std :: function не равнозначно сопоставимо?
  • Защита исполняемого файла от обратной инженерии?
  • Лучшая практика сохранения настроек приложения в приложении Windows Forms
  • Interesting Posts

    Попробуйте использовать Window.FEATURE_CUSTOM_TITLE, но получило исключение: вы не можете комбинировать собственные заголовки с другими функциями названия.

    Как просмотреть все символические ссылки, точки соединения, жесткие ссылки в папке с помощью dir?

    Как вы настраиваете, как JAXB генерирует множественные имена методов?

    Бесплатные бесплатные грамматики

    Как синхронизировать контакты Thunderbird с контактами Gmail

    Передача массива функции с переменным числом аргументов в Swift

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

    Как очистить текст всех текстовых полей в форме?

    Почему «f» требуется при объявлении float?

    Фильтр списка фильтров Пользовательский адаптер не дает результата

    Какой IP-адрес возвращается службе DNS?

    Захват изображения с камеры и отображение в действии

    Преобразование форм Word в формы PDF (заполнять)?

    Есть ли такой инструмент, как StartupMonitor для Windows 7?

    VBA Macro для сравнения всех ячеек двух файлов Excel

    Давайте будем гением компьютера.