使用客户端配置文件类库访问web.config

时间:2011-12-05 21:45:27

标签: c# .net-4.0 web-config app-config

我在针对.Net Framework 4 Client Profile构建的类库中有一些代码。代码访问使用应用程序的配置。对于客户端应用程序(WinForms应用程序,控制台应用程序等),为App.Config获取正确的对象很简单:

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

我的类库也需要适用于Web应用程序。访问Web.Config的正确方法也很简单:

WebConfigurationManager.OpenWebConfiguration("~");

问题是WebConfigurationManager是System.Web的一部分,它不能作为.Net Framework 4 Client Profile的一部分提供。

有没有办法可以编写我的代码或构建我的项目,以便在两种情况下都能正常工作?它需要运行良好才能访问仅安装了客户端配置文件的系统上的app.config。它还需要能够在必要时访问web.config。也许有一些方法可以动态加载system.web或其他程序集,当它可用时以及何时需要它?

2 个答案:

答案 0 :(得分:1)

非常有趣的问题; - )

如果您必须阅读appSettings,只需使用需要ConfigurationManager.AppSettings的{​​{1}}并测试它在Web应用程序上的工作方式。如果它有效,你最好去,最终你必须在System.Configuration部分提供所需的限制,或者探索appSettings类和的其他类和选项不要使用类似ConfigurationManger

的内容

答案 1 :(得分: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];