When migrating Wix 3.0 to Wix 4.0 getting error : WXCP0006 : The whitespace preceding this node is incorrect (WhitespacePrecedingNodeWrong)

When migrating Wix 3.0 to Wix 4.0 getting error : WXCP0006 : The whitespace preceding this node is incorrect (WhitespacePrecedingNodeWrong)

当我使用 WixCOP 将 Wix 3.0 迁移到 Wix 4.0 时,出现错误 WXCP0006:此节点之前的白色 space 不正确(白色spacePrecedingNodeWrong)

我正在运行执行以下命令

WixCop.exe -f E:\Test\Wix\src\UI*.wxs.

当我 运行 使用相同的命令从 Wix 2.0 迁移到 Wix 3.0 时,我没有收到任何错误。


更新:感谢您提供详细信息。

1) 我 运行 多次执行以下命令并得到相同的错误。

WixCop.exe -f E:\Test\Wix\src\UI*.wxs.

2) 在我 运行 命令

之后,我看到了 .WXS 文件中的变化(名称space 和其他变化)

3) 我想知道如何配置不正确的白色 space(我的意思是 wix40-binaries bcz 中的哪个文件我见过很少的 .config 文件,但这些文件与 wixcop 无关)

还有我可以在哪个文件中禁止命令 "WhitespacePrecedingNodeWrong" ?

当我最初从 wix 2.0 迁移到 wix 3.0 时,我遇到了 whispace 错误。然后当我 运行 下面的 Fix errors 命令时,这些错误被解决了 WixCop.exe -f E:\Test\Wix\src\UI*.wxs.

但是当从 wix 3.0 迁移到 wix 4.0 时,为什么这个命令没有解决这些错误?

UPDATE2: Maybe you can log the results per file better - to see what breaks. Here is one proposal (I have long tried to forget about batch files, so pardon any lacking elegance. No guarantees for the sanity herein):

for %h in (*.wxs) do wixcop -f "%h" -set1Test.xml >> Log.log

Where Test.xml is the settings file described in a section below. Or run without the settings file:

for %h in (*.wxs) do wixcop -f "%h" >> Log.log

显然要小心上述命令!它们将以目标文件夹中的所有 WiX 源文件为目标 - 在您的情况下这是您想要的,但对于找到命令行:注意.


更新:

  1. Pinpoint: 你能尝试 运行 命令的子集吗文件或每个文件一次,以便您可以确定哪个文件导致了实际问题?找到它的另一种方法可能是 运行 所有文件(使用当前的通配符方法),然后查看哪些文件 not 已更新?

  2. Unchanged Files?:如我上面所说,请尝试确定哪些文件有 已更新。如果有的话。未更改的文件可能会触发中止更新操作的错误?

  3. 抑制错误:除了在 the documentation I linked to earlier。让我们尝试构建一个简单的设置文件来忽略两种类型的错误:

    File Name: Test.xml
    
    <Settings>
       <IgnoreErrors>
         <Test Id="WhitespacePrecedingNodeWrong" />
         <Test Id="WhitespacePrecedingEndElementWrong" />   
       </IgnoreErrors> 
    </Settings>
    
    Command Line To Use: wixcop.exe -f Product.wxs -set1Test.xml
    
  4. 解决方案:简短的回答是我不知道为什么你这次有无法解决的问题。如前所述,请尽可能使用上述建议将问题缩小到单个文件或一组文件。


更正,新的更正如下practicing tautologies):如果你运行命令再次上相同的文件,错误消失了吗?似乎 WiX 文件仍在更新(就其可写性而言)——尽管有错误消息——发生的是该过程修复了缩进和换行不一致(除其他外),因此源文件符合 WiX 标准(或您自己的标准)之后。

设置标准:您看到的是一个错误,表明您的源文件中存在白色 space 不一致.这可能只是错误的缩进数量 - 例如。根据这里的 Bob Arnson's WiX Cop 片段:http://www.joyofsetup.com/2008/03/26/wix-goodies-wixcop 不正确白色的检测 space 是可配置的 -除了白色 space 之外的其他检查的许多其他参数也是如此。您需要提供设置文件并定义正确的命令行开关来设置您自己的标准。例如,您可能想要抑制某些测试和修复。下面的在线文档 link 中有一个设置文件的简短示例。

WiXCop.exe:这里就不一一赘述了,请看上面Arnson的post , 或 运行 wixcop /? 通过命令行获取可用命令行开关的列表(当然必须安装 WiX,并且您需要 WiX Bin directory 在路径中)。您还可以在 WiX online documentation for WiXCop.exe.

中查看所有开关

我想总体总结是 WiXCop.exe 通过在编译之前直接验证 WiX XML 源文件来进一步扩展正常的 MSI 文件验证微星格式。当 WiX 版本之间的架构更改需要批量更新时,它有助于迁移源。

我有点惊讶 WiX XML 更新过程没有自动备份功能。我想有一个很好的理由不这样做。在 运行ning WiXCop 之前备份您的源文件,然后与一个好的 diff 工具进行比较。我用 Beyond Compare.