2012-07-09 34 views
0

我有一個app.config文件。使用LINQ更新app.config

我想以檢索和編輯屬性:

<appSettings> 
    <add key="ProcessorInstances" value="2" /> 
</appSettings> 

我使用此查詢:

var list5 = from appNode in doc2.Descendants("appSettings").Elements() 
      where appNode.Attribute("key").Value == "ProcessorInstances" 
      select appNode; 
var element5 = list5.FirstOrDefault(); 
string five = element5.Attribute("value").Value; 

但現在我面臨的相同的元素:

<app> 
    <file value="../../../logs/Intel.Service.log" /> 
</app> 

和:

<baseAddresses> 
    <add baseAddress="http://Machinename:portnumber/servicename/" /> 
</baseAddresses> 

這些元素沒有任何鍵屬性。

如何編寫LINQ查詢來編輯它們?

+0

你想從你的appConfig與linq檢索baseAddress? – 2012-07-09 15:01:38

+0

你爲什麼想用linq做這個?有標準的方式來處理配置文件。 您可以讓Visual Studio生成一個(資源)對象,供您從配置文件中讀取值。之後,您可以使用替換功能來更改值。 – 2012-07-09 15:03:10

+0

您需要提供配置中元素的完整路徑以幫助您。如果它的應用程序設置下的東西,那麼你很容易使用ConfiguratioinManager.AppSettings – Rajesh 2012-07-09 15:05:49

回答

7

將app.Config文件解析爲xml並使用Linq不是從App.Config獲取設置的方式。而是使用System.Configuration.ddl(在項目中添加對此文件的引用)。

E.g.

string baseAddress = ConfigurationManager.AppSettings["baseAddress"].ToString(); 
+0

是的,但這些app.config文件不在同一個類庫中。他們在不同的位置,所以我覺得使用linq – user1410658 2012-07-09 15:09:29

+1

這是壞習慣訪問另一個庫配置文件中保存的變量,因爲你不能保證其有效性。相反,當您在庫中構造對象的實例時,請在構造函數中傳遞值。 – 2012-07-09 15:12:37

+0

好的!感謝你的建議 – user1410658 2012-07-09 15:14:38