如何在 WiX 4 中使用 HarvestDirectory

jam*_*esm 9 windows-installer wix4

我尝试在 WiX 4 Preview 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我只是假设项目中的 ComponentGroupName 会以某种方式(神奇地)与 wxs 文件中的 ComponentGroupRef 对齐,但我收到了一个错误:

错误 WIX0094:找不到标识符“WixComponentGroup:maincomponent”。确保您已正确键入引用,并且所有必要的输入均已提供给链接器。

将组件组显式添加到 wxs 可以修复构建,但会导致安装程序为空。

我确信 HarvestDirectory 会做一些事情,但具体是什么还不清楚。

Woo*_*man 2

检查您的项目中是否确实引用了 Heat 扩展包(我在添加该包时遇到了问题并看到了相同的行为):

<PackageReference Include="WixToolset.Heat" Version="4.0.0-preview.1" />
Run Code Online (Sandbox Code Playgroud)