添加 Wix 包含文件不会引发 "hexadecimal value 0x00, is an invalid character."
Adding Wix Include file throws not "hexadecimal value 0x00, is an invalid character."
我有一个包含 4 个共享包含文件的 wix 安装程序项目的解决方案。在我的开发机器上一切都很好。检查所有内容并开始构建。在构建机器上 运行 时抛出以下错误:
1>D:\agent\_work\s\Path\to\WixPorject\Product.wxs(3,0): error CNDL0104: Not a valid source file; detail: '.', hexadecimal value 0x00, is an invalid character. Line 2, position 1.
1>Done building project "whatever.wixProj" -- FAILED.
我继续构建机器并在 VS 2019 中打开解决方案,没有发现任何错误。在我的 license.rtf 末尾有一个 NULL 字符,但即使在删除它之后,我仍然通过 VS 构建相同的错误。我发现,如果我在我的 product.wxs 中注释掉 include 语句,替换所有 $(var.Variables) 它构建良好。两个系统都使用 Wix 工具集 v3.11.2.4516。
config.wxi
<?xml version="1.0" encoding="UTF-8"?>
<Include>
<?define SourceDir = "D:\agent\_work\b" ?>
</Include>
product.wxs
<?xml version='1.0' encoding='UTF-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<?include "..\config.wxi" ?>
在我的开发机器上构建没有问题。
好的 - 这就是我的问题。我不敢相信我没有早点检查过。因此,我使用 PowerShell 任务进行替换,它更改了 xml 文件的编码。直到我在 Notepad++ 中将更新后的文件与原始文件进行比较后才意识到这一点,它抛出了“尝试与不同编码进行比较”警告消息!所以当我在构建机器上用VS打开项目时,它正在纠正编码和构建。
另一个注意事项是我什至不必更新路径只需要使用环境变量,'SourceDir = $(env.BUILD_BINARIESDIRECTORY)' - 虽然,仍然需要更新版本和升级代码。
这是我使用的:
$configFile = "$(Build.SourcesDirectory)$(Branch)\WixMSI\config.wxi"
(Get-Content "$configFile") `
-replace 'SourceDir = "(.*?)"', "SourceDir = ""$(Build.BinariesDirectory)""" `
-replace 'MSIUpgradeCode = "(.*?)"', "MSIUpgradeCode = ""$(MSIUpgradeCodeHS)""" `
-replace 'ProductVersion = "(.*?)"', "ProductVersion = ""$(Version)""" `
-replace 'ReleaseVersion = "(.*?)"', "ReleaseVersion = ""$ReleaseVersion""" |
Out-File "$configFile"
只需添加:Out-File "$configFile" -Encoding "utf8"
我有一个包含 4 个共享包含文件的 wix 安装程序项目的解决方案。在我的开发机器上一切都很好。检查所有内容并开始构建。在构建机器上 运行 时抛出以下错误:
1>D:\agent\_work\s\Path\to\WixPorject\Product.wxs(3,0): error CNDL0104: Not a valid source file; detail: '.', hexadecimal value 0x00, is an invalid character. Line 2, position 1.
1>Done building project "whatever.wixProj" -- FAILED.
我继续构建机器并在 VS 2019 中打开解决方案,没有发现任何错误。在我的 license.rtf 末尾有一个 NULL 字符,但即使在删除它之后,我仍然通过 VS 构建相同的错误。我发现,如果我在我的 product.wxs 中注释掉 include 语句,替换所有 $(var.Variables) 它构建良好。两个系统都使用 Wix 工具集 v3.11.2.4516。
config.wxi
<?xml version="1.0" encoding="UTF-8"?>
<Include>
<?define SourceDir = "D:\agent\_work\b" ?>
</Include>
product.wxs
<?xml version='1.0' encoding='UTF-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<?include "..\config.wxi" ?>
在我的开发机器上构建没有问题。
好的 - 这就是我的问题。我不敢相信我没有早点检查过。因此,我使用 PowerShell 任务进行替换,它更改了 xml 文件的编码。直到我在 Notepad++ 中将更新后的文件与原始文件进行比较后才意识到这一点,它抛出了“尝试与不同编码进行比较”警告消息!所以当我在构建机器上用VS打开项目时,它正在纠正编码和构建。
另一个注意事项是我什至不必更新路径只需要使用环境变量,'SourceDir = $(env.BUILD_BINARIESDIRECTORY)' - 虽然,仍然需要更新版本和升级代码。
这是我使用的:
$configFile = "$(Build.SourcesDirectory)$(Branch)\WixMSI\config.wxi"
(Get-Content "$configFile") `
-replace 'SourceDir = "(.*?)"', "SourceDir = ""$(Build.BinariesDirectory)""" `
-replace 'MSIUpgradeCode = "(.*?)"', "MSIUpgradeCode = ""$(MSIUpgradeCodeHS)""" `
-replace 'ProductVersion = "(.*?)"', "ProductVersion = ""$(Version)""" `
-replace 'ReleaseVersion = "(.*?)"', "ReleaseVersion = ""$ReleaseVersion""" |
Out-File "$configFile"
只需添加:Out-File "$configFile" -Encoding "utf8"