将Wix 3.0迁移到Wix 4.0时出现错误:WXCP0006:此节点前的空格不正确(WhitespacePrecedingNodeWrong)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Wix 3.0迁移到Wix 4.0时出现错误:WXCP0006:此节点前的空格不正确(WhitespacePrecedingNodeWrong)相关的知识,希望对你有一定的参考价值。

当我使用WixCOP将Wix 3.0迁移到Wix 4.0时,我收到错误WXCP0006:此节点前面的空格不正确(WhitespacePrecedingNodeWrong)

我正在运行以下命令

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文件(命名空间和其他更改)中的更改

3)我想知道如何配置不正确的空格(我的意思是wix40-binaries bcz中的哪个文件我见过几个.config文件,但那些与wixcop无关)

而且我可以在哪个文件中禁止命令“WhitespacePrecedingNodeWrong”?

当我从wix 2.0迁移到wix 3.0时,我最初得到了漏洞错误。然后当我运行下面的修复错误命令时,这些错误被解析了WixCop.exe -f E: Test Wix src UI * .wxs。

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

答案

UPDATE2:也许你可以更好地记录每个文件的结果 - 看看有什么中断。这是一个提案(我一直试图忘记批处理文件,所以请原谅任何缺乏优雅。不保证这里的理智):

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

其中Test.xml是以下部分中描述的设置文件。或者没有设置文件运行:

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

显然要小心上面的命令!它们将针对目标文件夹中的所有WiX源文件 - 在您的情况下是您想要的,但对于找到命令行的其他人:谨慎。


更新:

  1. Pinpoint:你能尝试在文件的子集上运行命令,还是每个文件运行一次,这样你就可以确定哪个文件导致了实际的问题?找到这个的另一种方法可能是运行所有文件(使用您当前的通配符方法),然后查看哪些文件尚未更新?
  2. 未更改的文件?:正如我上面所说,请尝试确定哪些文件尚未更新。如果有的话。未更改的文件可能会触发中止更新操作的错误?
  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标准(或者你自己的标准)之后。

设置标准:您看到的是一个错误,指出源文件中存在空格不一致。例如,这可能只是一些错误的缩进。根据Bob Arnson's WiX Cop片段:http://www.joyofsetup.com/2008/03/26/wix-goodies-wixcop可以配置不正确的空白区域的检测 - 就像白色空间之外的其他检查的许多其他参数一样。您需要提供设置文件并定义正确的命令行开关以设置您自己的标准。例如,您可能想要取消某些测试和修复。下面的在线文档链接中有一个设置文件的简短示例。

WiXCop.exe:我不会在这里重复所有细节,请参阅上面的Arnson帖子,或者通过命令行运行wixcop /?获取可用命令行开关列表(当然必须安装WiX,你需要WiX Bin directory in路径)。您还可以在WiX online documentation for WiXCop.exe中查看所有开关。

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

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

以上是关于将Wix 3.0迁移到Wix 4.0时出现错误:WXCP0006:此节点前的空格不正确(WhitespacePrecedingNodeWrong)的主要内容,如果未能解决你的问题,请参考以下文章

从对话框调用 CustomAction 时出现 WiX 安装错误 2762

使用 WiX C#/.NET 4 自定义操作时出现错误 2896

仅在WinXP计算机上安装WiX时出现错误2259

项目将 Flex 3.0 迁移到 Flex 4.0 时出错

wix - 错误 CNDL0004:从命令行运行时文件元素包含意外的属性“src”

wix - 错误CNDL0004:从命令行运行时,file元素包含意外的属性“src”