WIX如何删除xmlns=”“标记

WIX如何删除xmlns=”“标记,wix,wix3.7,wix-extension,Wix,Wix3.7,Wix Extension,我有一个安装网站的wix项目。其中一个步骤是向web.config文件添加几个xml标记。每当添加xml标记时,WIX都会添加我不想要的xmlns=属性 pluginsetings.wxi <?xml version="1.0" encoding="utf-8"?> <Include> ... <?define PluginProbingPath="<probing privatePath="IntegrityChecker\bin\" />

我有一个安装网站的wix项目。其中一个步骤是向web.config文件添加几个xml标记。每当添加xml标记时,WIX都会添加我不想要的xmlns=属性

pluginsetings.wxi

<?xml version="1.0" encoding="utf-8"?>
<Include>
  ...
    <?define PluginProbingPath="<probing privatePath="IntegrityChecker\bin\" />" ?>
</Include>
ConfigFiles.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <?include PluginSettings.wxi ?>
    <Fragment>
        <!-- WEB.CONFIG -->
        <Component Id="Web.ConfigPortal" Guid="3ED81B77-F153-4003-9006-4770D789D4B7" Directory ="INSTALLDIR">
            <CreateFolder/>

              ...
            <util:XmlConfig Id = "AppConfigAddPlugin1" ElementPath = "//configuration/runtime/assemblyBinding" Action = "create" Node = "document"
                On = "install" File = "[INSTALLDIR]web.config" Value  = "$(var.PluginProbingPath)" Sequence = "1"/>

        </Component>
    </Fragment>
</Wix>
这导致web.config在安装后具有以下内容:

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         ...
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0"/>
        </dependentAssembly>
    <probing xmlns="" privatePath="IntegrityChecker\bin\"/></assemblyBinding>
  </runtime>
正如您所看到的,我没有指定我不想要的xmlns标记

我已尝试使用附加标记删除该属性,但无效:

    <util:XmlFile Id="AppConfigAddPlugin8" Action="deleteValue" Permanent="yes" File="[INSTALLDIR]web.config"
        ElementPath="//configuration/runtime/assemblyBinding/probing" Name="xmlns" Sequence = "2"/>

我做错了什么?

WIX XmlConfig扩展使用MSXML修改目标计算机上的XML文件。具体地说,属性action=create和node=document产生了以下简化的MSXML调用序列:

选择SingleNode//configuration/runtime/assemblyBinding 从以下位置创建新的xml文档: 获取顶级文档元素 调用appendChild以追加新文档元素 问题是探测元素没有名称空间,但父assemblyBinding元素具有名称空间urn:schemas microsoft com:asm.v1。当MSXML添加探测元素时,会添加xmlns=以重置默认名称空间。如果没有xmlns=,探测元素将继承urn:schemas microsoft com:asm.v1命名空间

这篇文章描述了这种行为。不幸的是,本文和其他文章建议在添加探测元素时更改调用序列以指定默认名称空间。由于这是WIX,我们无法轻松更改WIX使用MSXML的方式

您可以尝试向探测元素添加命名空间:


WIX XmlConfig扩展使用MSXML修改目标计算机上的XML文件。具体地说,属性action=create和node=document产生了以下简化的MSXML调用序列:

选择SingleNode//configuration/runtime/assemblyBinding 从以下位置创建新的xml文档: 获取顶级文档元素 调用appendChild以追加新文档元素 问题是探测元素没有名称空间,但父assemblyBinding元素具有名称空间urn:schemas microsoft com:asm.v1。当MSXML添加探测元素时,会添加xmlns=以重置默认名称空间。如果没有xmlns=,探测元素将继承urn:schemas microsoft com:asm.v1命名空间

这篇文章描述了这种行为。不幸的是,本文和其他文章建议在添加探测元素时更改调用序列以指定默认名称空间。由于这是WIX,我们无法轻松更改WIX使用MSXML的方式

您可以尝试向探测元素添加命名空间: