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

时间:2010-06-06 12:36:15

标签: .net web-config app-config

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

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

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

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

4 个答案:

答案 0 :(得分:4)

我已经四处寻找,似乎你不能做你想做的事,因为网络模型与应用程序模型不同。有点令人惊讶的是,他们没有提供通常的情况。

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

答案 1 :(得分:1)

虽然我并不熟悉你想要做的事情,但我的猜测是有一种方法可以获得配置部分,而无需明确指定要使用的配置(app.config与web.config)。就像您可以使用ConfigurationManager.AppSettings来检索值,无论您的应用是否是网络应用,您都可以使用ConfigurationManager.GetSection("system.serviceModel")吗?

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

答案 2 :(得分:1)

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

  

HostingEnvironment.IsHosted财产

     

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

使用它,您的代码变为:

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

ServiceModelSectionGroup serviceModelSectionGroup = 
    ServiceModelSectionGroup.GetSectionGroup(configuration);

答案 3 :(得分:0)

您可以检查HttpContext,但是在您托管WCF服务的情况下,根据您拨打电话的位置,您将看不到HttpContext。为此,我通常会检查托管过程,看看它是IIS还是Cassini - 当新的操作系统版本或VS的新版本问世时,这种方法的问题是不得不担心更新库。