С# - конфигурация приложения не изменяется

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

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 config.AppSettings.Settings["username"].Value = m_strUserName;

 // I also tried - 
 //config.AppSettings.Settings.Remove("username");
 //config.AppSettings.Settings.Add("username", m_strUserName);

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

Теперь - я вижу, что во время выполнения - файл "... vshost.exe.config" в папке "Отладка" изменяется, гайка при закрытии приложения - все изменения удаляются. Что я могу сделать?

Ответ 1

Чтобы проверить, используя обычный файл конфигурации exe, отмените флажок "Включить процесс хостинга Visual Studio" на вкладке "Отладка" в меню свойств проекта. Это заставит визуальную студию больше не использовать файл vshost.exe для запуска, и будет использоваться правильный файл конфигурации.

enter image description here

Ответ 2

При развертывании приложения для ваших конечных пользователей нет vshost.config.
Ваши изменения будут применены к реальному exe.config. Поэтому вам не нужно беспокоиться об этом.

Когда вы создаете приложение в сеансе отладки, файл app.config, присутствующий в вашем проекте, копируется в выходной каталог. Затем этот файл конфигурации копируется также в файл vshost.config. Таким образом, содержимое app.config перезаписывает любые изменения, сделанные во время сеанса отладки в файле vshost.exe.config.

Однако позвольте мне сказать, что писать такую ​​информацию в конфигурацию приложения - это плохая практика. Файл конфигурации должен использоваться только для хранения постоянной конфигурации, которая обычно не изменяется в течение всего срока службы вашего приложения. Например, параметры подключения являются достоверной информацией для хранения там, потому что вы обычно не меняете их, и вы не хотите их жестко кодировать.

Настройки, такие как имя пользователя, должны использовать user.config. Эта конфигурация предназначена для каждого пользователя/для каждого приложения и допускает доступ для чтения/записи.