共享属性:“错误LGHT0094:未解析对符号的引用”

时间:2019-04-23 08:27:12

标签: wix

我正在尝试在多个产品之间共享属性,默认情况下未设置该属性。除了一种产品,我想将其设置为一个值。

所以在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-现在我将InstallUISequence替换为InstallExecuteSequence,它可以满足我的要求。请参阅Rob Mensching的答案以获取解释和替代解决方案。

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

1 个答案:

答案 0 :(得分:1)

当我第一次遇到这个问题(最近)时,这个问题使 me 陷入了循环。该错误消息是正确的,但可能更有帮助 *

根本问题是InstallInitialize中不存在InstallUISequence。默认情况下,SetPropertyboth属性使用Sequence。这意味着set属性是在InstallInitializeInstallExecuteSequence中在InstallUISequence动作之前/之后进行调度的。由于InstallInitialize中不存在InstallUISequence,因此您会收到错误消息:

Unresolved reference to symbol 'WixAction:InstallUISequence/InstallInitialize'

解决方法是使用Sequence='execute'仅安排InstallExecuteSequence所在的InstallInitialize中属性的设置。另外,您可以选择其他操作来安排之前/之后的时间。

使用SetProperty很像这样:

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

* 改进错误消息已成为我的雷达。