2009-05-04 80 views
7

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

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

  • 是否有网络 应用程序的问题如果配置 是不是在网络 应用程序的根水平?这里有限制吗?
  • 我将失去缓存和 网络 应用程序的自动循环使用,如果我不使用的web.config
  • 是一般一个坏主意共享配置描述?

回答

9

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

例如你可以外部化的连接字符串的设置,如下所示:

<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> 

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

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

马克

+0

configSource属性不允许在其中放入“..”或“〜/”,并指出“它必须引用与配置文件相同的目录或子目录中的文件”。鉴于此,如果两个项目都不能达到比其自身更高的目录级别,那么两个项目如何共享一个外部文件? – 2011-09-19 12:40:01

2

你仍然需要一个网络的.config因为有是特定于Web,将不会在你的服务的app.config配置的元素。由于Marc says,使用ConfigSource属性将使您能够共享公共元素。

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

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

此不同的行为与ConfigSource属性,因为你没有更换与外部文件的完整部分,它可以只包含您想拥有除,或覆盖值的元素:

可以使用文件属性来指定一个配置文件,它提供附加的设置覆盖了在所述的appSettings元素中指定的设置

如果使用ConfigSource分享等元素,那么你仍然可以看到该应用程序的自动重新启动时,值改变 - 对restartOnExternalChanges属性应为ASP.NET应用程序被忽略的注意,但是使用文件属性将意味着更改不会导致重新启动。

外部文件的内容仍然应该被缓存,所以不应该影响性能。