我的.Net应用程序如何确定是使用app.config还是web.config

我的.Net应用程序如何确定是使用app.config还是web.config,.net,web-config,app-config,.net,Web Config,App Config,我有一个类,需要从应用程序配置文件中获取一些设置,用于基于控制台的应用程序和web应用程序 除了捕获异常,我如何确定是否使用: ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)); 或 虽然我不太清楚您到底想做什么,但我

我有一个类,需要从应用程序配置文件中获取一些设置,用于基于控制台的应用程序和web应用程序

除了捕获异常,我如何确定是否使用:

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);