共享属性:"error LGHT0094 : Unresolved reference to symbol"

Sharing properties: "error LGHT0094 : Unresolved reference to symbol"

我正在尝试在多个产品之间共享 属性,这不是默认设置。除了一种产品,我想将其设置为一个值。

所以 shared.wxi:

<Include>
    <Property Id="MYPROP" Secure="yes"></Property>
</Include>

并且在 product.wxs 中:

<Wix>
    <Product>
        <?include ..\shared\shared.wxi?>
        <SetProperty Id="MYPROP" Value="1" After="InstallInitialize"/>
    </Product>
</Wix>

但是我们的构建系统抱怨:

error LGHT0094 : Unresolved reference to symbol 'WixAction:InstallUISequence/InstallInitialize' in section 'Product:{583365A4-93C2-434A-BCD8-8A1035DF2AC7}'

我什至不确定 After="InstallInitialize"(或 Before=...)是否是正确的位置,我只想在包含之后但之前为该产品设置 属性其他任何事情都被考虑在内。另外,我对整个 WIX 系统几乎一无所知,我只是想在知识渊博的同事休假期间快速修复一些东西。

更新 - 现在我尝试了这个而不是 SetProperty,但仍然得到同样的错误:

  <CustomAction Id="CA_SETMYPROP" Property="MYPROP" Value="1" />
  <InstallUISequence>
    <Custom Action="CA_SETMYPROP" Before="InstallInitialize" />
  </InstallUISequence>

更新 2 - 现在我用 InstallExecuteSequence 替换了 InstallUISequence 并且它做了我想要的。有关解释和替代解决方案,请参阅 Rob Mensching 的回答。

  <CustomAction Id="CA_SETMYPROP" Property="MYPROP" Value="1" />
  <InstallExecuteSequence>
    <Custom Action="CA_SETMYPROP" Before="InstallInitialize" />
  </InstallExecuteSequence>

这个问题让我 第一次遇到它时(最近才遇到)。错误消息是正确的,但可能更有帮助*.

根本问题是 InstallInitializeInstallUISequence 中不存在。默认情况下,SetProperty 使用 both 作为 Sequence 属性。这意味着集合 属性 在 InstallExecuteSequenceInstallUISequence 中都安排了 before/after InstallInitialize 操作。由于 InstallInitializeInstallUISequence 中不存在,您将收到错误消息:

Unresolved reference to symbol 'WixAction:InstallUISequence/InstallInitialize'

修复方法是使用 Sequence='execute' 仅在 InstallInitialize 所在的 InstallExecuteSequence 中安排 属性 的设置。或者,您可以选择不同的操作来安排 before/after.

使用 SetProperty 会像这样:

<SetProperty Id="MYPROP" Value="1" After="InstallInitialize" Sequence="execute" />

* 改进错误消息是我的目标。