2011-01-13 5 views
1

У меня есть приложение Windows Forms VS 2008 - C#, которое использует app.config.Редактирование app.config во время выполнения с использованием того же приложения

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

любой образец исходного кода, любые хорошие шаблоны и практики?

редактировать:

в форумах MSDN, Jean Paul VA:

  1. Создать тест приложения Windows Forms и добавьте app.config в него.

  2. Добавить ссылку на System.confguration

  3. Добавить ключ с именем «шрифт» в AppSettings со значением «Verdana»

  4. Разместите кнопку на форме и нажмите на него добавить код модификации.

    System.Configuration.Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    
        configuration.AppSettings.Settings.Remove("font"); 
        configuration.AppSettings.Settings.Add("font", "Calibri"); 
    
        configuration.Save(ConfigurationSaveMode.Modified); 
    
        ConfigurationManager.RefreshSection("appSettings"); 
    

, что вы об этом думаете?

+0

Вам нужно напишите * другое * приложение, чтобы вы могли отобразить приглашение UAC, чтобы получить доступ на запись к файлу. Но, конечно же, вы должны использовать настройки с Scope = User. –

ответ

1

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

Вы также можете просто рассмотреть возможность сохранения настроек приложения в файле настроек, которые легко манипулируют таким образом.

Чтобы использовать настройки, сначала предположим, что у вас есть файл Settings.settings (если нет, то создайте один: Добавить элемент-> Файл настроек), тогда у нас есть настройка, настроенная по имени MyUnicornsName; Для того, чтобы сделать изменения и сохраняться это, вы можете просто сделать следующее:

Settings.Default.MyUnicornsName = "Lucifers Spawn"; 
Settings.Default.Save(); 

Аналогично, чтобы прочитать настройки:

ATextDisplayControl.Text = Settings.Default.MyUnicornsName 

В случае, если вы не знаете, Visual Studio откроет редактор настроек при открытии/двойном щелчке файла настроек в среде IDE; используя этот интерфейс, вы можете добавлять и редактировать свои начальные настройки и их значения, а string - это не единственное поддерживаемое значение, все примитивы могут использоваться и, насколько мне известно, любое сериализуемое значение.

+0

любой хороший пример об изменении настроек приложения во время выполнения? – Kiquenet

+0

Да, мой ответ обновлен; не видел ваш запрос, извините. –

+0

отлично; при сохранении следует перезапустить приложение? и но как я могу шифровать такие значения, как пароли или строки подключения? – Kiquenet

0

Есть ли причина, по которой вы не можете использовать обычные авто-gen'd Properties.Settings для хранения измененных данных в файле настроек? Самое замечательное в том, что вы знаете, что вы меняете, поэтому вам даже не нужно перезапускать приложение!

Using Settings in C#

выполнение доступ настройка так же легко, как:

this.BackColor = Properties.Settings.Default.myColor; 

(Там нет хорошего шаблона для приложения необходимости модифицировать.config просто b/c, он предназначен для чтения только в этом контексте, с настройками эксперта-пользователя.)

0

Используйте Project-> Properties-> Settings для таких вещей.

0

На самом деле свойства в App.config являются ReadOnly, поэтому вы не можете это сделать.

Но есть трюк ............................

В Settings.cs файл создать функцию или метод, который является открытым, так что она может быть доступна с Properties.settings

и написать следующий код ..

public void ChangeProperty(string propertyname, string value) 
    { 
     this[propertyname] = value; 
    } 

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

обновление

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

public string MyCustomConnectionstring 
    { 
     set 
     { 
      //replace the string with your connection string otr what ever setting you want to change 
      this["myConnectionString"] = value; 
     } 
    } 

Теперь вы можете легко использовать это свойство, чтобы изменить ConnectionString во время выполнения ...

Смежные вопросы