代码之家  ›  专栏  ›  技术社区  ›  sipsorcery

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

  •  0
  • sipsorcery  · 技术社区  · 14 年前

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

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

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

    ServiceModelSectionGroup serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(WebConfigurationManager.OpenWebConfiguration("~"));
    
    4 回复  |  直到 12 年前
        1
  •  4
  •   roufamatic RichardJohnn    14 年前

    我已经讨论过了,似乎你不能做你想做的事情,因为Web模型不同于应用程序模型。有点令人惊讶的是,他们没有提供通常的情况。

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

        2
  •  1
  •   wsanville    14 年前

    虽然我不清楚您要做什么,但我想有一种方法可以在不显式指定要使用的配置(app.config与web.config)的情况下获取config部分。就像你能用 ConfigurationManager.AppSettings 要检索值,无论您的应用程序是否为Web应用程序,您可以使用 ConfigurationManager.GetSection("system.serviceModel") ?

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

        3
  •  0
  •   HintonBR    14 年前

    您可以检查httpContext,但在托管WCF服务时,有一些实例,根据调用的位置,您将看不到httpContext。要做到这一点,我通常会检查托管进程,看看它是IIS还是Cassini——使用这种方法的Gotcha必须在新的操作系统版本或新的vs版本出现时担心更新库。

        4
  •  0
  •   Sergii Volchkov    12 年前

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

    托管环境.ishosted 财产

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

    使用它,您的代码会变成:

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