3

我创建了一个 WixLib 项目和解决方案,其中包含一个片段,该片段指向我想包含在多个项目中的一组 DLLS。

但是,当我从其他解决方案中引用此 wixlib 时,dll 所在目录的预处理器值随 wixlib 一起提供。我想覆盖这个值或更新它。

我的 Wixlib 看起来像这样:

<Fragment>
   <ComponentGroup Id="CG.FarPointComponents">
      <Component Id="cmpBBC3777DD58F5E2AE4704D66EF87C105" Directory="INSTALLDIR"
                 Guid="6CB60019-D122-41F6-8009-C41B07BCE5C3">
         <File Id="filC126C8C2BFE502E045C17A812B8A907D" KeyPath="yes"
               Source="$(var.FarPointDir)\FarPoint.CalcEngine.dll" />
      </Component>
   </ComponentGroup>
</Fragment>

我想在另一个解决方案中为 var.FarPointDir 指定另一个目录我该怎么办?我正在使用 wix 3.6

4

1 回答 1

4

几个选项:

  1. 创建binary .wixlib- 使用-bf开关lit.exe将文件嵌入到 .wixlib。这样 .wixlib 是完全独立的,尽管它会更大。

  2. 使用bind paths- 绑定路径类似于搜索路径,但用于查找需要在包中结束的文件。如果您创建File/@Source相对路径(不以 开头X:\或仅以开头\),则将搜索未命名的绑定路径。light.exe您可以使用-bp命令行开关指定绑定路径。或者,您可以使用命名绑定路径,它们如下所示:

    <File Source='!(bindpath.Name)\FarPoint.CalcEngine.dll' />
    

    同样,-bp交换机可以创建命名绑定路径。

  3. 使用bind variable- 而不是使用预处理器变量(在“编译”之前解析),使用在“绑定时间”解析的变量。您可以引用绑定变量,例如:!(wix.Var)。这可以在命令行上light.exe设置为,也可以使用WixVariable元素在代码中设置。

我使用选项 #1 将 .wixlibs 分发给其他人(自包含),如果只是我的东西,则使用选项 #2(二进制 .wixlibs 会稍微减慢构建速度)。

于 2013-03-12T20:32:08.893 回答