2011-12-05 32 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()。 –