配置转换,转换后无法识别 XML 命名空间

Config Transform, Unrecognized XML Namespace After Transformation

我们的一个配置文件被奇怪地转换了。

基本配置

<?xml version="1.0"?>
<configuration >

</configuration>

发布配置(因为它在项目中,t运行为简洁起见)

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore xdt:Transform="Insert">
    <contentSearch>
      <configuration>
        <indexes>
          <index id="sitecore_web_index">
            <param desc="core" patch:instead="param[@desc='core']">#{IndexEnvironment}#_web_index</param>
          </index>
        </indexes>
        <indexes role:require="Standalone or ContentManagement">
          <index id="sitecore_master_index">
            <param desc="core" patch:instead="param[@desc='core']">#{IndexEnvironment}#_master_index</param>
          </index>

构建后 运行,最终配置的输出看起来很奇怪:

Post 建造

<?xml version="1.0"?>
<configuration>
    <sitecore>
        <contentSearch>
            <configuration>
                <indexes>
                    <index id="sitecore_web_index">
                        <param desc="core" d7p1:instead="param[@desc='core']" xmlns:d7p1="http://www.sitecore.net/xmlconfig/">ASHQA_web_index</param>
                    </index>
                </indexes>
                <indexes d5p1:require="Standalone or ContentManagement" xmlns:d5p1="http://www.sitecore.net/xmlconfig/role/">
                    <index id="sitecore_master_index">
                        <param desc="core" d7p1:instead="param[@desc='core']" xmlns:d7p1="http://www.sitecore.net/xmlconfig/">ASHQA_master_index</param>
                    </index>

请注意 patchrole 定义如何分别更改为 d7p1d5p1

虽然这是有效的 XML,但它会导致我们的应用程序出现问题,该应用程序解析 XML 并查找 patchrole 的正确术语。

TL;DR

转换后的配置中所需的任何名称空间都需要在基本配置中定义。

基本配置更新

<?xml version="1.0"?>
<configuration xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:patch="http://www.sitecore.net/xmlconfig/">

</configuration>

即使基本配置不依赖于这些命名空间,但如果不包含它们,它们将无法正确继承。这也会按预期清理生成的配置的输出:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <contentSearch>
            <configuration>
                <indexes>
                    <index id="sitecore_web_index">
                        <param desc="core" patch:instead="param[@desc='core']">#{IndexEnvironment}#_web_index</param>
                    </index>
                </indexes>
                <indexes role:require="Standalone or ContentManagement">
                    <index id="sitecore_master_index">
                        <param desc="core" patch:instead="param[@desc='core']">#{IndexEnvironment}#_master_index</param>
                    </index>