2012-03-26 78 views
12

我正在開發一個簡單的類庫項目,它會給我一個dll。從App.config中讀取類庫項目

我想要從配置文件中讀取特定值。所以我添加了一個App.config文件到我的項目中。

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

    <appSettings> 
    <add key="serviceUrl" value="test value" /> 
    </appSettings> 

    </configuration> 

以上就是我的App.config文件,現在我想如下

string strVal = System.Configuration.ConfigurationManager.AppSettings["serviceUrl"]; 

但我沒有得到我的字符串變量的任何值讀它。

enter image description here

我曾用類似的方式完成這個Web應用程序和它的工作。 但不知何故,我無法得到這個工作。

在一個類庫項目中使App.config正確無誤的想法是什麼?

+0

你有多個App.config文件嗎?嘗試調試並查看ConfigurationManager.AppSettings中的密鑰計數,如果它顯示0我會假設VS沒有檢測到您的應用程序配置文件。 – 2012-03-26 12:25:27

+0

我有一個app.config文件,並且附加了我的調試的屏幕快照 – Yasser 2012-03-26 12:26:37

+0

將應用程序配置文件添加到主項目中,而不是添加到類庫組件中。 – 2012-03-26 12:28:57

回答

16

正如我的評論所述,將App.Config文件添加到主解決方案中,而不是添加到類庫項目中。

+0

我在我的解決方案中有兩個項目1.類庫2.測試項目我在哪裏添加它? – Yasser 2012-03-26 12:35:04

+0

嘗試測試項目 – 2012-03-26 12:39:18

+0

找到它! 由於達倫 我嘗試和增加的app.config到我的測試項目,因爲我是在ConfigurationManager.AppSetting打字......我ReSharper的再次提示我,這System.Configuration版本2.0和4.0 我記得我走4.0之前,而在我的課程項目編碼我回去並刪除了4.0的參考和2.0 2.0一個 現在它的工作! – Yasser 2012-03-26 12:42:35

6

你不需要添加app.config文件。 如果創建類庫爲基於Web的應用程序,那麼你可以從web.config文件中讀取直接連接 字符串

OR

您可以添加在它的連接字符串任何文本文件,並獲取該字符串。 使用該

public static ConnectionStringSettings ConnSettings 
{ 
    get 
    { 
     string connectionStringKey = null; 
     connectionStringKey = ConfigurationManager.AppSettings.Get("DefaultConnectionString"); 
     return ConfigurationManager.ConnectionStrings[connectionStringKey];   
    } 
} 
+0

感謝您的回答,並歡迎來到SO! – Yasser 2012-09-27 07:33:56

1

假設的問題是要求具體到DLL項目一個配置文件,而不是應用程序或Web應用程序項目的配置文件,我用下面的代碼即可在「sqlSection從鍵的值「 部分。 (一個小心的是,這個配置文件 - 即使它被設置爲始終複製 - 不會自動複製到一個Web應用程序的部分版本中,所以我使用了令人敬畏的單行預生成操作來複制文件,在本文中提到https://stackoverflow.com/a/40158880/1935056)。

這裏是整個DLL配置文件

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


<sqlSection> 

<add key="sql1" value="--statement--"/> 
</sqlSection> 

這是C#代碼。

string GetSqlStatement(string key) 
    { 
      string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\DataLayer.dll.config"; 

     XDocument doc = XDocument.Load(path); 

     var query = doc.Descendants("sqlSection").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault(); 

     if (query != null) 
     { 
      return query.Attribute("value").Value.ToString(); 
     }