.NET中的共享配置文件

时间:2009-05-04 16:30:56

标签: .net asp.net-mvc configuration windows-services

我有一个包含Web和Windows NT服务应用程序的解决方案。这些当然是两个不同的项目,但在同一个解决方案中。然而,他们分享了许多相同的配置。

目前,我在web.config和app.config文件中都有相同的值。这开始变得混乱,我想为解决方案中的两个应用程序提供共享配置文件。

  • 网络是否存在问题 应用程序如果配置 不在网络的根级别 应用?这里有限制吗?
  • 我是否会松开缓存 自动回收网络 应用程序,如果我不使用web.config
  • 如上所述共享配置通常是个坏主意吗?

2 个答案:

答案 0 :(得分:9)

好吧,你可以将配置的某些部分“外部化”为单独的.config文件,并在两个地方使用它们。

E.g。你可以像这样外化你的连接字符串设置:

<connectionStrings configSource="connectionStrings.config" />

然后使用“connectionString.config”文件:

<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
  <add name="ConfigurationDatabase" 
       connectionString="server=.;Integrated Security=true;database=test"/>
  <add name="TestDatabase" 
       connectionString="server=TEST;Integrated Security=true;database=test"/>
</connectionStrings>

基本上,任何ConfigurationSection都有这样的“configSource”设置,允许您指定要使用的外部文件。

这样,您就可以共享两个配置文件的公共部分。

马克

答案 1 :(得分:2)

您仍然需要 web .config,因为配置的某些元素是特定于Web的,不会出现在您服务的app.config中。作为Marc says,使用ConfigSource属性可以共享公共元素。

请注意,appSettings元素略有不同:文件属性。

  

指定包含自定义应用程序配置设置的外部文件的相对路径。指定的文件包含在appSettings add,clear和remove属性中指定的相同类型的设置,并使用与这些元素相同的键/值对格式。

这与ConfigSource属性的行为不同,因为您不必用外部文件替换整个部分,它可以只包含您想要拥有的元素,或覆盖值:

  

您可以使用file属性指定一个配置文件,该文件提供其他设置覆盖appSettings元素中指定的设置

如果您使用ConfigSource来共享其他元素,那么在更改值时您仍将自动重新启动应用程序 - 对于ASP.NET应用程序,应忽略有关restartOnExternalChanges属性的注释,但是使用文件属性意味着更改不会导致重新启动。

外部文件的内容仍应缓存,因此不应影响性能。