wix 3 安装程序:未解析的绑定时间变量!(bind.fileVersion.Name.exe)
wix 3 installer: Unresolved bind-time variable !(bind.fileVersion.Name.exe)
我正在尝试使用 Wix3 的绑定 "bind.fileVersion"。 (即:3.11.1)
出于某些原因,我收到以下错误消息:
未解析的绑定时间变量 !(bind.fileVersion.TestWix3.exe).
我的目标是填写 'Product Id' 行。特别是 Version="$(var.VERSION)" 信息。
这是我的 "Product.wxs" 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<?define LongName = "Test wix 3" ?>
<?define Manufacturer = "Test" ?>
<?define ProductUpgradeCode = "5fc3e435-fad3-4c1d-997f-3483beffe0a4" ?>
<?define MAINEXE=$(var.TestWix3.TargetFileName)?>
<?define VERSION="!(bind.fileVersion.$(var.MAINEXE))"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="$(var.LongName)" Language="1036" Codepage="1252" Version="$(var.VERSION)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.ProductUpgradeCode)">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="Wix3Installer" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Wix3Installer" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
</Wix>
这是我在 VS2017 社区中的解决方案的屏幕截图。
错误如下:
知道为什么 (bind.fileVersion) 的绑定不起作用吗?
语法是 !(bind.fileVersion.FileId)
-- 注意小写 f
。
绑定变量的 FileId 部分表示 <File Id="...">
ID。即:
!(bind.fileVersion.TestWix3.exe)
...
<Component Id="MainProduct">
<File Id="TestWix3.exe" KeyPath="yes" Source="$(var.TestWix3.TargetPath)"/>
... other stuff maybe ...
</Component>
目前您的组件和文件定义是TODO
,所以您还不能使用这种类型的绑定变量。
你定义 ?define MAINEXE=$(var.TestWix3.TargetFileName)?
翻译成:
创建一个名为 MAINEXE 的变量并将其设置为另一个变量的值。
没有定义变量TestWix3.TargetFileName
您的第二个定义创建了一个名为 VERSION 的变量并使用未定义的 MAINEXE
改用这样的定义
?定义 MAINEXE=sample.exe?
定义 VERSION="!(bind.fileVersion.$(var.MAINEXE))"?
编译没问题
我省略了前后的<<>>?
我正在尝试使用 Wix3 的绑定 "bind.fileVersion"。 (即:3.11.1)
出于某些原因,我收到以下错误消息:
未解析的绑定时间变量 !(bind.fileVersion.TestWix3.exe).
我的目标是填写 'Product Id' 行。特别是 Version="$(var.VERSION)" 信息。
这是我的 "Product.wxs" 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<?define LongName = "Test wix 3" ?>
<?define Manufacturer = "Test" ?>
<?define ProductUpgradeCode = "5fc3e435-fad3-4c1d-997f-3483beffe0a4" ?>
<?define MAINEXE=$(var.TestWix3.TargetFileName)?>
<?define VERSION="!(bind.fileVersion.$(var.MAINEXE))"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="$(var.LongName)" Language="1036" Codepage="1252" Version="$(var.VERSION)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.ProductUpgradeCode)">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="Wix3Installer" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Wix3Installer" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
</Wix>
这是我在 VS2017 社区中的解决方案的屏幕截图。
错误如下:
知道为什么 (bind.fileVersion) 的绑定不起作用吗?
语法是 !(bind.fileVersion.FileId)
-- 注意小写 f
。
绑定变量的 FileId 部分表示 <File Id="...">
ID。即:
!(bind.fileVersion.TestWix3.exe)
...
<Component Id="MainProduct">
<File Id="TestWix3.exe" KeyPath="yes" Source="$(var.TestWix3.TargetPath)"/>
... other stuff maybe ...
</Component>
目前您的组件和文件定义是TODO
,所以您还不能使用这种类型的绑定变量。
你定义 ?define MAINEXE=$(var.TestWix3.TargetFileName)? 翻译成: 创建一个名为 MAINEXE 的变量并将其设置为另一个变量的值。
没有定义变量TestWix3.TargetFileName 您的第二个定义创建了一个名为 VERSION 的变量并使用未定义的 MAINEXE
改用这样的定义
?定义 MAINEXE=sample.exe?
定义 VERSION="!(bind.fileVersion.$(var.MAINEXE))"?
编译没问题
我省略了前后的<<>>?