我在针对.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或其他程序集,当它可用时以及何时需要它?
答案 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];