我尝试在 WiX 4、预览版 1 中使用 HarvestDirectory 项目元素,但发现它非常不直观。尽管我遵循文档中的面包屑,但我似乎无法让它真正执行任何明显的操作。在 WiX 3 中,我直接使用命令行工具,并且可以通过这种方式生成组件条目,但这似乎不是版本 4 中的做法,所以如果这确实有效,那就太好了。
这是一个项目文件,或多或少按照文档:
<Project Sdk="WixToolset.Sdk/4.0.0-preview.1">
<PropertyGroup>
<HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds>
<HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow>
</PropertyGroup>
<ItemGroup>
<HarvestDirectory Include="files">
<ComponentGroupName>maincomponent</ComponentGroupName>
<DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
<SuppressRootDirectory>true</SuppressRootDirectory>
</HarvestDirectory>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Wixtoolset.Heat" />
</ItemGroup>
</Project>
WiX 标记基本上如下所示:
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Package Name="thing" Manufacturer="maker of thing" Version="1.0.0.0" UpgradeCode="c5a29143-303d-40bb-9a3b-0c207a80d8a8">
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
<Feature Id="mainfeature">
<ComponentGroupRef Id="maincomponent" />
</Feature>
</Package>
<Fragment>
<StandardDirectory Id="ProgramFiles64Folder">
<Directory Id="dir1" Name="dir1">
<Directory Id="dir2" Name="dir2">
<Directory Id="INSTALLFOLDER" Name="installfolder" />
</Directory>
</Directory>
</StandardDirectory>
</Fragment>
</Wix>
我只是假设项目中的 ComponentGroupName 会以某种方式(神奇地)与 wxs 文件中的 ComponentGroupRef 对齐,但我得到了一个错误:
错误 WIX0094:找不到标识符“WixComponentGroup:maincomponent”。确保您正确输入了引用,并且所有必要的输入都已提供给链接器。
将组件组显式添加到 wxs 可以修复构建,但会导致安装程序为空。
我确信 HarvestDirectory 做了一些事情,或者其他,但具体是什么还不清楚。
检查您的项目中是否确实引用了 Heat 扩展包(我在添加该包时遇到了问题并看到了相同的行为):
<PackageReference Include="WixToolset.Heat" Version="4.0.0-preview.1" />
我遇到了另一个变体,它会导致与 WixToolset.Heat 版本 4.0.0 相同的错误消息。
就我而言,我使用
Include
(反斜杠)在 \
属性中指定了一个子文件夹,这给了我同样的错误 WIX0094
。
我通过将所有 \
(反斜杠)替换为 /
(斜杠)来修复它。似乎斜杠是唯一受支持的分隔符。
例如:
<HarvestDirectory Include="Folder\SubFolder">
(错误)
<HarvestDirectory Include="Folder/SubFolder">
(正确)