我们开发了许多不同的Web应用程序,这些应用程序最终位于同一个公共站点,并使用sitecore作为cms,它将不同的配置文件合并到一个Web配置中。不幸的是,在sitecore设置中经常会出现重复的配置。
目前:它只是加入配置文件,只留下每个重复键的最后一个定义。因此,更新其中一个配置文件并不反映合并文件中的更改,如果有另一个配置文件,该设置稍后会被处理。
预期:阻止在多个配置文件中定义1个配置。如果多个配置文件中存在重复的密钥,则它不应该以静默方式覆盖,而是抛出错误,以便我们可以对配置进行重复数据删除。
有谁知道如何防止这种情况?例如,一种覆盖执行合并的管道的方法,永远不会覆盖任何东西(或者至少在它做的时候应该警告我们)
编辑1:
为了说明配置连接作业是多么邪恶,这里有两个示例配置文件:
aaa.config:
<configuration><sitecore>
<settings>
<setting name="key0" value "a-value">
<setting name="key1" value "a-value">
</settings>
</sitecore></configuration>
zzz.config:
<configuration><sitecore>
<settings>
<setting name="key1" value "z-value">
<setting name="key2" value "z-value">
</settings>
</sitecore></configuration>
加入:
<configuration><sitecore>
<settings>
<setting name="key0" value "a-value">
<setting name="key1" value "z-value">
<setting name="key2" value "z-value">
</settings>
</sitecore></configuration>
但不是默默地加入文件,我喜欢它抛出一个例外,说“key1”含糊不清!
答案 0 :(得分:3)
没有可用的设置OOTB来防止这种情况发生,这是Sitecore中的预期和预期行为。您可以在this document或this blog post了解有关配置修补的详细信息。
有可能提供您自己的Sitecore.Configuration.ConfigReader
实施,以防止此但是 Sitecore即使在默认安装中也会使用配置补丁。防止此行为可能会导致Sitecore中断(和/或导致其他问题)。如果你沿着这条路走下去,那么请确保仅 target a specific custom folder。
答案 1 :(得分:0)
一位同事刚刚建议的解决方案:一个非常严格的命名策略,例如为每个配置键添加项目名称和国家/地区:“Docs_NZ_UploadMaxSize”,“Loan_NL_ProductsPath”等...这样也可以防止项目中的重复键和/或国家。
下行:在现有项目中重命名/重构。
@ jammykam的回答听起来更有趣。无论如何,我会在我们站起来之后提出两种可能的解决方案,以便投票选择哪条路线(因此接受的答案)。