防止 web 配置 sitecore 中的重复设置键

prevent duplicate settings keys in web config sitecore

我们开发了许多不同的 Web 应用程序,这些应用程序最终出现在同一个 public 站点中,并使用 sitecore 作为 cms,它将不同的配置文件合并到一个 Web 配置文件中。不幸的是,在 sitecore 设置中经常有重复的配置。

目前:它只是加入配置文件,只留下每个重复键的最后定义。因此,更新其中一个配置文件不会反映合并文件中的更改,如果稍后处理具有该设置的另一个配置文件。

预期:防止在多个配置文件中定义 1 个配置。如果多个配置文件之间存在重复键,它不应该静默覆盖而是抛出错误,以便我们可以对我们的配置进行去重。

有谁知道我们如何防止这种情况发生?例如,一种覆盖执行合并的管道的方法,永远不会覆盖任何东西(或者至少在它覆盖时应该警告我们)

编辑 1:

为了说明 config-join 作业有多邪恶,这里有 2 个示例配置文件:

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" 不明确!

没有可用的 OOTB 设置来防止这种情况发生,这是 Sitecore 中预期和预期的行为。您可以在 this document or this blog post.

中阅读有关配置补丁如何工作的更多信息

也许可以提供您自己的 Sitecore.Configuration.ConfigReader 实现来防止这种情况 但是 即使在默认安装中,Sitecore 也会自己使用配置补丁。阻止此行为可能会导致 Sitecore 中断(and/or 导致其他问题)。如果你确实沿着这条路走下去,那么请确保你只 target a specific custom folder.

同事刚刚建议的解决方案:非常严格的命名策略,例如在每个配置键前加上项目名称和国家/地区:"Docs_NZ_UploadMaxSize"、"Loan_NL_ProductsPath" 等...还可以防止跨项目 and/or 个国家/地区的重复密钥。

缺点:renaming/refactoring 在现有项目中。

@jammykam 的回答听起来更有趣。无论如何,我会在我们的站会后提出两种可能的解决方案,以投票决定采取哪条路线(因此接受什么答案)。