Запись значений в файле app.config
кто-нибудь может помочь мне, как я могу установить / сохранить значения в файле app.config с помощью c #, возможно ли это вообще?
- Сохранение объекта поверх клавиатуры в случае старта FirstResponder или resignFirstResponder?
- Ошибка сегментации cudaMemcpy
- endl и очистка буфера
- ToList () - Создает ли он новый список?
- Как обновить токен доступа с помощью токена обновления?
- C #: что является самым простым способом вычитать время?
- Является ли этот thread.abort () нормальным и безопасным?
- Анонимные функции с использованием выражений операторов GCC
Если вы используете App.Config для хранения значений в разделе
или CustomSections, используйте class ConfigurationManager, иначе используйте class XMLDocument.
Вы можете использовать код, отправленный в CodeProject
Попробуйте следующий код:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); config.AppSettings.Settings.Add("YourKey", "YourValue"); config.Save(ConfigurationSaveMode.Minimal);
Это сработало для меня 🙂
В Framework 4.5 часть AppSettings.Settings [“key”] в ConfigurationManager читается только, поэтому мне пришлось сначала удалить ключ, а затем добавить его снова, используя следующее:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); config.AppSettings.Settings.Remove("MySetting"); config.AppSettings.Settings.Add("MySetting", "some value"); config.Save(ConfigurationSaveMode.Modified);
Не беспокойтесь, вы не получите исключение, если попытаетесь удалить ключ, который не существует.
Этот пост дает хороший совет
private static string GetSetting(string key) { return ConfigurationManager.AppSettings[key]; } private static void SetSetting(string key, string value) { Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); configuration.AppSettings.Settings[key].Value = value; configuration.Save(ConfigurationSaveMode.Full, true); ConfigurationManager.RefreshSection("appSettings"); }
Для консольного приложения .NET 4.0 ни один из них не работал для меня. Поэтому я использовал следующее ниже, и это сработало:
private static void UpdateSetting(string key, string value) { Configuration configuration = ConfigurationManager. OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); configuration.AppSettings.Settings[key].Value = value; configuration.Save(); ConfigurationManager.RefreshSection("appSettings"); }
Как уже упоминалось, вы можете сделать это с помощью ConfigurationManager.AppSettings.Settings
. Но: Использование Settings[key] = value
не будет работать, если ключ не существует.
Используя Settings.Add(key, value)
, если ключ уже существует, он будет присоединяться к новому значению к его значению, разделенному запятой, что-то вроде
Чтобы избежать этих неожиданных результатов, вам необходимо обрабатывать два сценария
- Если запись с данным ключом существует? затем обновить его значение
- если запись с данным ключом не существует? затем создайте новую запись (ключ, значение)
Код
public static void Set(string key, string value) { var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var entry = config.AppSettings.Settings[key]; if (entry == null) config.AppSettings.Settings.Add(key, value); else config.AppSettings.Settings[key].Value = value; config.Save(ConfigurationSaveMode.Modified); }
Для получения дополнительной информации о контрольной entry == null
, проверьте этот пост .
Надеюсь, это поможет кому-то.
Да, вы можете – см. ConfigurationManager
Класс ConfigurationManager включает членов, которые позволяют выполнять следующие задачи:
- Чтение и запись файлов конфигурации в целом.
Научитесь использовать документы , они должны быть вашим первым портом для вызова такого вопроса.
Попробуйте следующее:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings[key].Value = value; config.Save(); ConfigurationManager.RefreshSection("appSettings");
string filePath = System.IO.Path.GetFullPath("settings.app.config"); var map = new ExeConfigurationFileMap { ExeConfigFilename = filePath }; try { // Open App.Config of executable Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); // Add an Application Setting if not exist config.AppSettings.Settings.Add("key1", "value1"); config.AppSettings.Settings.Add("key2", "value2"); // Save the changes in App.config file. config.Save(ConfigurationSaveMode.Modified); // Force a reload of a changed section. ConfigurationManager.RefreshSection("appSettings"); } catch (ConfigurationErrorsException ex) { if (ex.BareMessage == "Root element is missing.") { File.Delete(filePath); return; } MessageBox.Show(ex.Message); }