2011-12-05 29 views
4

我有一個類庫中的一些代碼構建目標.Net Framework 4客戶端配置文件。代碼訪問消費應用程序的配置。爲了得到對App.Config中合適的對象客戶端應用程序(的WinForms應用程序,控制檯應用程序等)很容易:訪問與客戶端配置文件類庫web.config

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

我的類庫也需要爲Web應用程序的工作。正確的方法可以訪問到Web.config中也很容易:

WebConfigurationManager.OpenWebConfiguration("~"); 

的問題是,WebConfigurationManager是System.Web程序的一部分,這是不是可以作爲.NET Framework 4的客戶端配置文件的一部分。

有沒有一種方法可以編寫我的代碼或構建我的項目,以便它在兩種情況下都能正常工作?它需要運行足夠好才能訪問僅安裝了客戶端配置文件的系統上的app.config。它還需要能夠在必要時訪問web.config。也許有一些方法可以動態加載system.web或其他程序集,當它可用並且需要時?

回答

1

如前所述的限制通過Davide Piras,ConfigurationManager.AppSettings[]將適用於AppSettings部分中的條目。在該部分之外,可以使用ConfigurationManager.GetSection()

奇怪的是,ConfigurationManager.GetSection()上的返回值與Configuration.GetSection()上的返回值不同。 ConfigurationManager版本不會返回可以投射到AppSettingsSection之類的對象。相反,您必須將其投射到System.Collections.Specialized.NameValueCollection。但是,只要您只想使用鍵/值字符串,就足夠了。完整的代碼如下所示:

using System.Configuration; 
using System.Collections.Specialized; 

var settingsSection = ConfigurationManager.GetSection(sectionName) as NameValueCollection; 
var configValue = settingsSection[keyName]; 
1

非常有趣的問題;-)

如果你要讀的appSettings只使用 ConfigurationManager.AppSettings需要 System.Configuration並測試它是如何工作在Web應用程序

。如果一切正常,你是好去,與最終,你必須把所有你在appSettings部分需要,或探索其他類和ConfigurationManger類和選項不使用類似的東西WebConfigurationManager

+0

不幸的是,我需要能夠讀取AppSettings之外的部分。這就是爲什麼我打開System.Configuration對象的原因之一;所以我可以去調用GetSection()。 –