这是一个常见的场景,并且有不同的方法来解决它。一种方法是使用config transforms。你可以有Web.Customer1.config
,Web.Customer2.config
等,就像你有Web.Debug.config
和一样Web.Release.config
。在客户特定的转换文件中,您只能“覆盖”appSettings
您的客户想要自定义的文件。
要创建不同的转换,首先要创建不同的项目平台。转到 Visual Studio 配置管理器,在Configuration
您的 Web 项目(或任何需要自定义配置设置的项目)的列中,单击下拉菜单,然后单击<New...>
。命名新项目配置Customer1
或任何您想要的名称,选中 框Copy settings from
,然后Release
从该下拉列表中选择。还要选中Create new solution configurations
复选框。
最后,右键单击您的web.config
文件并单击Add config transform
. 这将为您生成一个模板Web.Customer1.config
文件。使用配置转换属性对其进行编辑以覆盖appSettings
它需要的内容。xdt:
然后,您可以使用Customer1
解决方案构建配置发布项目。作为构建的一部分,web.config
将进行转换,您最终web.config
将为每个客户提供不同的文件。您还可以使用它为不同的部署定制项目,即更改数据库连接字符串、smtp 服务器,以及 XML 配置文件中的任何内容。
最后一个想法,确保您右键单击每个Web.Xyx.config
文件,选择属性,并将其设置Build Action
为None
.
例子:
基础 web.config
<appSettings>
<add key="CommonProperty1" value="[for all customers]" />
<add key="CommonProperty2" value="[for all customers]" />
<add key="CommonProperty3" value="[for all customers]" />
<add key="CustomProperty1" value="[for one customer]" />
<add key="CustomProperty2" value="[for one customer]" />
<add key="CustomProperty3" value="[for one customer]" />
<appSettings>
web.Customer1.config
<appSettings>
<add key="CustomProperty1" value="The Ohio State University" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="CustomProperty2" value="Scarlet" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="CustomProperty3" value="Gray" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<appSettings>
web.Customer2.config
<appSettings>
<add key="CustomProperty1" value="Michigan University" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="CustomProperty2" value="Blue" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="CustomProperty3" value="Maize" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<appSettings>