如何在 WiX 4 中使用 HarvestDirectory

问题描述 投票:0回答:2

我尝试在 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 做了一些事情,或者其他,但具体是什么还不清楚。

windows-installer wix4
2个回答
2
投票

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

<PackageReference Include="WixToolset.Heat" Version="4.0.0-preview.1" />

0
投票

我遇到了另一个变体,它会导致与 WixToolset.Heat 版本 4.0.0 相同的错误消息。

就我而言,我使用

Include
(反斜杠)在
\
属性中指定了一个子文件夹,这给了我同样的错误
WIX0094
。 我通过将所有
\
(反斜杠)替换为
/
(斜杠)来修复它。似乎斜杠是唯一受支持的分隔符。

例如:

<HarvestDirectory Include="Folder\SubFolder">
(错误)

<HarvestDirectory Include="Folder/SubFolder">
(正确)

© www.soinside.com 2019 - 2024. All rights reserved.