配置转换,转换后无法识别 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>
请注意 patch
和 role
定义如何分别更改为 d7p1
和 d5p1
。
虽然这是有效的 XML,但它会导致我们的应用程序出现问题,该应用程序解析 XML 并查找 patch
和 role
的正确术语。
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>
我们的一个配置文件被奇怪地转换了。
基本配置
<?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>
请注意 patch
和 role
定义如何分别更改为 d7p1
和 d5p1
。
虽然这是有效的 XML,但它会导致我们的应用程序出现问题,该应用程序解析 XML 并查找 patch
和 role
的正确术语。
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>