2012-12-12 27 views
1

我正在嘗試爲服務人員創建一個簡單的工具,以更新不同程序的App.Config中的幾個條目。 App.Config文件包含初始化程序時使用的自定義參數。從一個單獨的工具編輯App.Config名稱 - 值對

由於App.Config包含許多敏感項目,所以需要一個工具來確保只有某些參數被更改。因此,不允許他們直接編輯App.Config。

我的問題:

  1. 如何從一個單獨的程序訪問從一個app.config的配置部分的名稱 - 值對?
  2. 哪個更適合UI:Winforms或WPF?他們的控件是否容易在將來添加更多條目?
  3. 該工具應該允許用戶設置String,int,double或者Boolean。

這裏是在app.config的結構:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <configSections> 
    <sectionGroup name="Settings"> 
     <section name="Section1" type="System.Configuration.NameValueSectionHandler"/> 
     <section name="Section2" type="System.Configuration.NameValueSectionHandler"/> 
     <section name="Section3" type="System.Configuration.NameValueSectionHandler"/> 
     <section name="Section4" type="System.Configuration.NameValueSectionHandler"/> 
    </sectionGroup> 
    </configSections> 

    <Settings> 
    <Section1> 
     <add key="NAME_STRING" value="Some String"/> 
    </Section1> 

    <Section2> 
     <add key="NAME_INTEGER" value="10"/> 
    </Section2> 

    <Section3> 
     <add key="NAME_DOUBLE" value="10.5"/> 
    </Section3> 

    <Section4> 
     <add key="NAME_BOOLEAN" value="true"/> 
    </Section4> 
    </Settings> 

    ... Omitted ... 

</configuration> 

在其使用在app.config本身的程序,我可以很容易地改變,像這樣的值:

NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("Settings/Section1"); 

加載App.Config後,是否有類似的方式從單獨的程序執行此操作?

+0

只是一個說明:你的問題3其實不是一個問題。有沒有你想問的關於設置這些類型的數據? –

+0

啊,好的,趕上!只要可能,UI控件應該支持數據類型。如果有錯誤控制,比如在應該有一個整數的地方設置double,它會導致錯誤。 –

+0

你有沒有考慮加密敏感部分?然後您可以讓服務人員更改未加密的部分。這[鏈接](http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx)有更多信息。 – DeanOC

回答

2

對問題1的回答:app.config文件是一個XML文件。將它作爲XML文檔加載並以編程方式進行修改,然後進行保存可能是最容易的,而不是使用System.Configuration類。

ETA:我相信可以用ConfigurationManager完成。看看OpenMappedExeConfiguration方法。那裏有一個很好的例子。

+0

謝謝安。我更新了Q來顯示我們如何使用'ConfigurationManager'來更新這些值。加載XML之後有沒有辦法做到這一點? –

+0

如果你的意思是「用XML技術」,是的,你可以用LINQ for XML來完成。如果你的意思是「用ConfigurationManager」,我不確定。可以使用它來覆蓋另一個配置文件,但我不知道您是否可以即時編輯和保存配置文件。讓我看看幾件事。 –

+0

如果你找不到任何東西,你可以展示一個簡單的例子,在這種情況下LINQ是如何工作的。我不熟悉LINQ。謝謝。 –

0

您可以將app.config文件視爲正常的XML文件。使用XDocument或XmlDocument加載文件。

然後使用XPath或Linq到XML來查找名稱 - 值對。

至於Windows.Forms與WPF,它的設計決定。兩者都有好的和壞的點。

[更新]

如果你仍然想使用System.Configuration,您可以使用ConfigurationManager.OpenExeConfiguration以訪問其他程序的app.config文件。這將返回一個Configuration對象,其中有一個GetSection方法。

+0

我已經更新了Q以顯示我們如何更新程序本身的值。有沒有類似的方式來從外部程序做到這一點? –

+0

正如@Ann和我建議的,不要使用'System.Configuration'。把它當作一個XML文件。 –

+0

謝謝理查德。你能舉一個簡單的例子來說明如何使用XPath或LINQ? –