我的.Net应用程序如何确定是使用app.config还是web.config
我有一个类,需要从应用程序配置文件中获取一些设置,用于基于控制台的应用程序和web应用程序 除了捕获异常,我如何确定是否使用:我的.Net应用程序如何确定是使用app.config还是web.config,.net,web-config,app-config,.net,Web Config,App Config,我有一个类,需要从应用程序配置文件中获取一些设置,用于基于控制台的应用程序和web应用程序 除了捕获异常,我如何确定是否使用: ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)); 或 虽然我不太清楚您到底想做什么,但我
ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));
或
虽然我不太清楚您到底想做什么,但我想有一种方法可以在不明确指定要使用的配置(app.config vs.web.config)的情况下获取config部分。与您可以使用
ConfigurationManager.AppSettings
检索值一样,无论您的应用程序是否为web应用程序,您是否可以使用ConfigurationManager.GetSection(“system.serviceModel”)
如果这不起作用,我想最简单的方法就是简单地检查
System.Web.HttpContext.Current
是否为null(确保添加对System.Web
的引用),然后,您可以选择使用哪种配置。我已经仔细研究了一下,您似乎无法随心所欲,因为web模型与应用程序模型不同。有些令人惊讶的是,他们没有提供通常的情况
我将向类的构造函数中添加一个
配置参数,并从调用代码中注入依赖项。您可以检查HttpContext,但在托管WCF服务时,根据调用的位置,您可能看不到HttpContext。要做到这一点,我通常会检查托管过程,看看它是IIS还是Cassini——这种方法的关键在于,当新的OS版本或新的VS版本出现时,必须担心更新库。属性似乎正好提供了您需要的信息。
从MSDN:
HostingEnvironment.IsHosted
属性
获取一个值,该值指示当前应用程序域是否由对象承载
使用它,您的代码将变成:
Configuration configuration = HostingEnvironment.IsHosted
? WebConfigurationManager.OpenWebConfiguration("~")
: ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
ServiceModelSectionGroup serviceModelSectionGroup =
ServiceModelSectionGroup.GetSectionGroup(configuration);
也许我遗漏了什么——为什么不能使用ConfigurationManager.GetSection()
?我需要在system.serviceModel配置节点中列出客户端端点,我认为GetSection方法不允许我将该节点作为ServiceModelSectionGroup对象检索。您可以将其作为SectionGroup
获取,并强制转换到ServiceModelSectionGroup
@Oded ConfigurationManager.GetSection(“system.serviceModel”)返回null。
Configuration configuration = HostingEnvironment.IsHosted
? WebConfigurationManager.OpenWebConfiguration("~")
: ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
ServiceModelSectionGroup serviceModelSectionGroup =
ServiceModelSectionGroup.GetSectionGroup(configuration);