防止 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 的回答听起来更有趣。无论如何,我会在我们的站会后提出两种可能的解决方案,以投票决定采取哪条路线(因此接受什么答案)。
我们开发了许多不同的 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 的回答听起来更有趣。无论如何,我会在我们的站会后提出两种可能的解决方案,以投票决定采取哪条路线(因此接受什么答案)。