【问题标题】:How can my .Net app determine whether to use app.config or web.config我的 .Net 应用程序如何确定是使用 app.config 还是 web.config
【发布时间】:2012-12-13 18:58:08
【问题描述】:

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

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

ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));

ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(WebConfigurationManager.OpenWebConfiguration("~"));

【问题讨论】:

  • 也许我遗漏了什么——你为什么不能使用ConfigurationManager.GetSection()
  • 我需要在 system.serviceModel 配置节点中列出客户端端点,我认为 GetSection 方法不允许我将该节点作为 ServiceModelSectionGroup 对象检索。
  • 您可以将其作为SectionGroupcastServiceModelSectionGroup
  • @Oded ConfigurationManager.GetSection("system.serviceModel") 返回 null。

标签: .net web-config app-config


【解决方案1】:

我四处寻找,似乎你不能做你想做的事,因为 Web 模型与应用程序模型不同。他们没有为此提供通常的案例,这有点令人惊讶。

我会在类的构造函数中添加一个Configuration 参数,并从调用代码中注入依赖项。

【讨论】:

    【解决方案2】:

    HostingEnvironment.IsHosted 属性似乎准确地提供了您需要的信息。 来自 MSDN:

    HostingEnvironment.IsHosted 属性

    获取一个值,该值指示当前应用程序域是否由ApplicationManager 对象托管。

    使用它,你的代码变成:

    Configuration configuration = HostingEnvironment.IsHosted
        ? WebConfigurationManager.OpenWebConfiguration("~")
        : ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    
    ServiceModelSectionGroup serviceModelSectionGroup = 
        ServiceModelSectionGroup.GetSectionGroup(configuration);
    

    【讨论】:

      【解决方案3】:

      虽然我不熟悉您正在尝试做什么,但我的猜测是有一种方法可以在不明确指定要使用的配置的情况下获取配置部分(app.config 与 web.config)。就像您可以使用ConfigurationManager.AppSettings 来检索值,无论您的应用是否是网络应用一样,您可以使用ConfigurationManager.GetSection("system.serviceModel") 吗?

      如果这不起作用,我想最简单的方法是检查System.Web.HttpContext.Current 是否为空(确保添加对System.Web 的引用),然后您可以选择要使用的配置。

      【讨论】:

        【解决方案4】:

        您可以检查 HttpContext,但在某些情况下,当您托管 WCF 服务时,根据您进行调用的位置,您不会看到 HttpContext。为此,我通常会检查托管进程以查看它是 IIS 还是 Cassini - 采用这种方法的问题是,当新的操作系统版本或新版本的 VS 出现时,我不得不担心更新库。

        【讨论】:

          猜你喜欢
          • 2011-04-16
          • 2017-03-22
          • 1970-01-01
          • 2010-10-25
          • 2010-10-23
          • 1970-01-01
          • 2020-12-30
          • 2012-01-10
          • 2011-01-07
          相关资源
          最近更新 更多