我有一个包含Web和Windows NT服务应用程序的解决方案。这些当然是两个不同的项目,但在同一个解决方案中。然而,他们分享了许多相同的配置。
目前,我在web.config和app.config文件中都有相同的值。这开始变得混乱,我想为解决方案中的两个应用程序提供共享配置文件。
答案 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属性的注释,但是使用文件属性意味着更改不会导致重新启动。
外部文件的内容仍应缓存,因此不应影响性能。