Asp.net mvc 层次结构中的多个AppSettings.config文件
在创建ASP.NETMVC应用程序时,我有一个问题曾多次遇到:假设您有一个应用程序要部署到多个客户。应用程序代码是相同的,但您希望每个客户都有一个appSettings.config文件,这样您就可以通过更改web.config中appSettings标记的configSource来部署到不同的客户(虽然有点简化,但仍然如此) 然后您会意识到appSettings.config中50%的内容对所有客户都是通用的,只有50%的内容依赖于客户。您可能会在所有appSettings文件中都有重复的条目,这是一个主要的陷阱,因为如果您想在应用程序范围内更改配置,则需要记住更新所有条目 在这种情况下,我真的希望有某种层次结构的系统,您可以在单独的文件中有一个“基本配置”和一个“客户配置”。然后,我希望ConfigurationManager首先检查customer配置中的值,如果没有在那里定义该值,它将转到基本配置 在ASP.NETMVC4中,我还没有找到一种直接的方法来解决这个问题。它是否存在,或者我是否需要以某种方式绕过默认的ConfigurationManager类?我可以创建自己的类,并用对自己实现的调用替换对ConfigurationManager.AppSettings[key]的所有调用,但如果可以,我宁愿避免这样做。我希望能够利用内置ConfigurationManager处理的一些基本功能,如缓存等Asp.net mvc 层次结构中的多个AppSettings.config文件,asp.net-mvc,configuration,asp.net-mvc-4,appsettings,Asp.net Mvc,Configuration,Asp.net Mvc 4,Appsettings,在创建ASP.NETMVC应用程序时,我有一个问题曾多次遇到:假设您有一个应用程序要部署到多个客户。应用程序代码是相同的,但您希望每个客户都有一个appSettings.config文件,这样您就可以通过更改web.config中appSettings标记的configSource来部署到不同的客户(虽然有点简化,但仍然如此) 然后您会意识到appSettings.config中50%的内容对所有客户都是通用的,只有50%的内容依赖于客户。您可能会在所有appSettings文件中都有重复的条目
有谁曾经解决过类似的问题?我一直认为这似乎是一个常见的场景。这是一个常见的场景,有不同的方法来解决它。一种方法是使用。您可以有一个
Web.Customer1.config
,Web.Customer2.config
等,就像您有Web.Debug.config
和Web.Release.config
一样。在客户特定的转换文件中,您可以仅“覆盖”客户希望自定义的appSettings
要创建不同的转换,请首先创建不同的项目平台。转到Visual Studio配置管理器,在web项目(或任何需要自定义配置设置的项目)的配置列中,单击下拉列表,然后单击
。将新的项目配置命名为Customer1
或任何您想要的名称,选中复制设置框,然后从该下拉列表中选择Release
。同时选中创建新的解决方案配置
复选框
最后,右键单击web.config
文件,然后单击addconfig transform
。这将为您生成一个模板Web.Customer1.config
文件。使用xdt:
config transform属性编辑它以覆盖它需要的appSettings
。然后,您可以使用Customer1
解决方案生成配置发布项目。作为构建的一部分,将转换web.config
,最终为每个客户提供不同的web.config
文件。您还可以使用它为不同的部署定制项目,例如更改数据库连接字符串、smtp服务器,以及XML配置文件中的任何内容
最后,请确保右键单击每个Web.Xyx.config
文件,选择属性,并将其构建操作设置为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>
您知道这是否也适用于MS测试项目中的runsettings
文件吗?我在不同的集合中组织测试。一些TestRunParameters
对于所有程序集都是通用的,而另一些则仅针对特定程序集指定。您知道这一原则是否也适用于runsettings
?或者是否有其他机制可以使用runsettings