wix - 尝试更改引用解决方案中的 WixLib 预处理器变量

标签 wix wix3.6 wixlib

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

最佳答案

几个选项:

  1. 创建一个 binary .wixlib - 使用 -bf 切换到 lit.exe 将文件嵌入到 .wixlib .这样 .wixlib 就完全独立了,尽管它会更大。

  2. 使用绑定(bind)路径 - 绑定(bind)路径类似于搜索路径,但用于查找需要在包中结束的文件。如果您使 File/@Source 相对(不要以 X:\ 或只是 \ 开头),那么将搜索未命名的绑定(bind)路径.您可以使用 -bp 命令行开关指定 light.exe 的绑定(bind)路径。或者你可以使用命名绑定(bind)路径,它们看起来像这样:

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

    同样,-bp 开关可以创建命名绑定(bind)路径。

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

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

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

相关文章:

wix - 主要升级回滚

Wix,我在哪里可以找到 WixUI_InstallDir.wxs 和 InstallDirDlg.wxs

visual-studio-2010 - WIX 3.6 安装程序 - Visual Studio 2010 (HeatDirectory)

WiX MSI : How to put print. 输出或 wxs 文件中的 echo 语句?

visual-studio-2010 - VS2010 + Wix 3.6中将组件绑定(bind)到wixlib

Wix、加热和 Wxi 锉刀

wix - 如何在 Wix Bootstrap 中使用复选框值?

wix - 在每台机器安装上删除 HKCU 下的注册表项

WIX 在自定义操作中编辑二进制文件