2012-02-28 77 views
0

我一直在研究這個問題很久。但我還沒有遇到任何令人滿意的解決方案。如何在WPF應用程序中編輯app.config的ApplicationSettings部分

這種情況是我有一個WPF客戶端應用程序。我有幾個Web引用添加到項目中,我Settings.Designer.cs文件被修改,並具有硬編碼的引用到srever url和端口。這開始反映在ApplicationSettings部分的我的app.config文件中。

在用戶登錄之前,他可以指定服務器的ServerIP和端口的設置。現在我想將這些設置保存在app.config中,並獲取從那裏獲取的服務器IP和端口的值,或將其保存到別處並通過此IP和端口連接到服務器。我希望這些更改能夠持續下去。

我能想到的一個解決方案是通過XML閱讀器讀取app.config,修改文件,保存並以某種方式重新啓動應用程序。

我無法想象一個更好的場景,因爲我認爲ApplicationSettings部分不能從應用程序內部修改。

編輯:

我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

有時候前一個類似的問題被張貼在這個網站。
我有一個簡單的解決方案,看起來像這樣:

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; } 
} 
+0

上面的代碼讀取和appSettings部分,而不是的applicationSettings部分,它是通過在設置部分項目屬性訪問的值寫入。 – 2012-02-29 05:39:34

+0

我知道。但是applicationSettings是隻讀的標準NET方法。因此,與使用XML讀寫器編寫applicationSettings的想法相比,這是一個_cheap_解決方法。並讓鬆散重新啓動應用程序... – Steve 2012-02-29 08:09:13

+0

好吧,我明白,applicationSettings部分是隻讀的。但是,當我添加Web引用時,Visual Studio會自動將設置名稱和值添加到此部分,並在每次調用Web服務時自動選取它。它從** Settings.Designer.cs **文件** DefaultSettingValueAttribute **中獲取這個值。 – 2012-02-29 11:16:46

相關問題