我创建了一个 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

最佳答案

几个选项:

  • 创建一个 binary .wixlib - 使用 -bf 切换到 lit.exe 将文件嵌入到 .wixlib 中。这样 .wixlib 是完全独立的,尽管它会更大。
  • 使用 bind paths - 绑定(bind)路径类似于搜索路径,但用于查找需要在包中结束的文件。如果您使 File/@Source 相对(不要以 X:\ 或只是 \ 开头),则将搜索未命名的绑定(bind)路径。您可以使用 light.exe 命令行开关指定到 -bp 的绑定(bind)路径。或者,您可以使用命名绑定(bind)路径,它们如下所示:
    <File Source='!(bindpath.Name)\FarPoint.CalcEngine.dll' />
    

    同样,-bp 开关可以创建命名绑定(bind)路径。
  • 使用 bind variable - 而不是使用预处理器变量(在“编译”之前解析),而是使用在“绑定(bind)时间”解析的变量。您可以引用绑定(bind)变量,例如: !(wix.Var) 。可以在命令行上将其设置为 light.exe,或者您可以使用 WixVariable 元素在代码中设置它。

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

    关于wix - 尝试在引用的解决方案中更改 WixLib 预处理器变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15371016/

    10-13 02:38