Как редактировать раздел ApplicationSettings в app.config в приложении WPF - PullRequest
0 голосов
/ 28 февраля 2012

Я давно исследую эту проблему.Но я не нашел ни одного удовлетворительного решения.

Сценарий таков, что у меня есть клиентское приложение WPF.У меня есть несколько веб-ссылок, добавленных в проект, и я файл Settings.Designer.cs был изменен и имел жестко запрограммированную ссылку на URL и порт srever.Это начало отражаться в моем файле app.config в разделе ApplicationSettings.

Перед тем, как пользователь войдет в систему, он может указать настройки для ServerIP и Порт для сервера.Теперь я хотел бы сохранить эти настройки в app.config и получить оттуда значение для IP-адреса сервера и порта или сохранить его в другом месте и подключиться к серверу через этот IP-адрес и порт.Я хотел бы, чтобы эти изменения сохранялись.

Одним из решений, о котором я мог подумать, было чтение app.config через программу чтения XML, изменение файла, его сохранение и перезапуск приложения.

Я не могу придумать лучшего сценария, так как считаю, что раздел ApplicationSettings нельзя изменить изнутри приложения.

EDIT:

Мой раздел applicationSettiings выглядит примерно такэто:

<applicationSettings>
<ApplicationName.Properties.Settings>
  <setting name="Web_Service_Reference_Name1" serializeAs="String">
    <value>http://10.1.100.118:8080/AD/WebService1</value>
  </setting>
  <setting name="Web_Service_Reference_Name2" serializeAs="String">
    <value>http://10.1.100.118:8080/AD/WebService2</value>
  </setting>
</ApplicationName.Properties.Settings>
</applicationSettings>

1 Ответ

1 голос
/ 28 февраля 2012

Иногда подобный вопрос был опубликован на этом сайте.
У меня есть простые решения, которые выглядят так:

public void WriteLocalValue(string localKey, string curValue) 
{ 
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
    KeyValueConfigurationElement k = config.AppSettings.Settings[localKey]; 
    if (k == null) 
        config.AppSettings.Settings.Add(localKey, curValue); 
    else 
        k.Value = curValue; 
    config.Save(); 
} 

public string ReadLocalValue(string localKey, string defValue) 
{ 
    string v = defValue; 
    try 
    { 
        Configuration config = ConfigurationManager.OpenExeConfiguration( Application.ExecutablePath); 
        KeyValueConfigurationElement k = config.AppSettings.Settings[localKey]; 
        if (k != null) v = (k.Value == null ? defValue : k.Value); 
            return v; 
    } 
    catch { return defValue; } 
} 
...