【问题标题】:Opening a non web.config file as a configuration object打开一个非 web.config 文件作为配置对象
【发布时间】:2013-07-17 06:49:14
【问题描述】:

所以我的情况是我有一个 asp.net MVC 项目,我希望将大多数站点特定设置移动到一个不是 Web.config 的配置文件中。这样做的原因是为了避免在设置更改时回收应用程序池,但我想保留很多我已经拥有的配置代码。因此,我一直在尝试找出一种将配置文件作为配置对象加载的方法,而不是将其作为与应用程序一起加载的标准 Web.config。我一直在查看一些配置管理器类来加载配置文件,但它们似乎都想要一个类可以找到机器、Web 或应用程序配置的路径。那么是否可以将 .config 文件(不是 Web、应用程序或机器)作为配置对象加载?看起来应该很容易,因为它只是 XML,但我似乎遗漏了一些东西。

【问题讨论】:

  • 我认为,这是一个有点不同的问题,但毫无疑问,SOF 上的某个地方有答案
  • 我已经看到了该问题的答案所描述的方法。我不确定它是否适合我的情况。可能确实如此,但我可能只是误解了语法。我的配置文件位于文件结构中的 Web.config 旁边,但这些方法看起来可用于从其他来源加载外部配置。我想不出将 .config 作为 .NET 中的配置对象的方法。

标签: c# .net asp.net-mvc-3 config


【解决方案1】:

配置更改导致应用程序域重新启动

Web.config 文件中配置设置的更改间接导致应用程序域重新启动。此行为是设计使然。您可以选择使用 configSource 属性来引用进行更改时不会导致重新启动的外部配置文件。有关详细信息,请参阅节元素继承的常规属性中的 configSource。 MSDN

在您的 web.config 中:

<system.net>
   <myconfigSection>
       <myConfigEntry configSource="MyExtraConfig.config" />
   </myconfigSection>
</system.net>

在您的 MyExtraConfig.config 中:

<?xml version="1.0" encoding="utf-8" ?>
<myConfigEntry>
   <myConfigValue1 a="1" b="2" c="3" />
   <myConfigValue2 d="4" e="5" f="6""/>
</myConfigEntry>

【讨论】:

  • 有趣,我会进一步研究。我已经以这种方式设置了站点特定的配置信息,但是我相信我在进行更改时仍然体验到应用程序池回收的行为。也许默认行为是刷新外部更改,所以也许我需要将其显式设置为 false,尽管 .NET 阻止我在任何有 configSource 的地方应用该参数,所以我的设置可能不正确。
  • 所以是的,这个信息是正确的。我设置它的方式是让它在我没有意识到的情况下重新启动。对于可能遇到此问题以编辑配置的任何其他人,无论如何我都需要通过管理器打开文件并将其转换为我的 ConfigurationSection 类,通过设置器进行更改,然后保存管理器返回的配置对象。
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多