我如何在 WiX 安装程序脚本中实际使用 LinkerBindInputPaths PropertyGroup

Posted

技术标签:

【中文标题】我如何在 WiX 安装程序脚本中实际使用 LinkerBindInputPaths PropertyGroup【英文标题】:How do I actually use the LinkerBindInputPaths PropertyGroup in a WiX Installer script 【发布时间】:2013-08-05 17:42:04 【问题描述】:

我有一个 WiX 安装程序脚本,它引用了我的 Visual Studio 解决方案文件夹根目录中的文件夹中的文件。在我的 .wixproj 中,我尝试设置 Properties | Tool Setting | Linker

-b $(SolutionDir)\WixSource

并得到一个错误,因为在 $SolutionDir 变量的中间是一个带空格的文件夹。所以,我尝试了

-b "$(SolutionDir)\WixSource"

并得到一个错误,抱怨在名称周围使用引号,并且显然我应该在带有空格的文件夹末尾放置一个双反斜杠。 --不能这样做,因为它在 $(SolutionDir) 宏内。

因此,根据关于 SO 的建议,我希望尝试使用 LinkerBindInputPaths PropertyGroup,但该属性的实际用法严重缺乏文档。

我正在运行 WiX 3.7,以下是不允许的...

在谷歌搜索时,有人告诉我它需要进入 <Package> 元素,例如:

<Package ...>
    <PropertyGroup>
        <LinkerBindInputPaths ???/>
    </PropertyGroup>
</Package>

WiX 文档 @http://wix.sourceforge.net/manual-wix3/msbuild_task_reference_light.htm 说

指定链接器用来定位所有文件的活页夹路径。这相当于 light.exe 中的 -b 开关。 命名的 BindPath 是通过将 2 个或更多字符的存储桶名称加上等号 ("=") 作为提供的路径的前缀来创建的。

由于没有从谷歌搜索中找到示例,我无法解读“2 个或更多字符的存储桶名称”是什么,或者是否有任何规则。

我希望能够指定类似$(var.SolutionDir)\WixSource 的内容,但需要一些帮助来确定如何解决此问题...

【问题讨论】:

FWIW,WiX 不是“脚本”。如果你把这个神话放在一边,学习起来会更容易。 【参考方案1】:

LinkerBindInputPaths 是项目组,而不是属性组。它位于您的 .wixproj MSBuild 项目文件中。例如:

<ItemGroup>
  <BindInputPaths Include="$(MSBuildProjectDirectory)" />
  <BindInputPaths Include="$(WIX_ROOT)src" />
  <BindInputPaths Include="$(WIX_ROOT)bin" />
  <BindInputPaths Include="$(WIX_ROOT)" />
</ItemGroup>

【讨论】:

所以,文档是错误的。好的。我最终得到了一个在不使用 ItemGroup 的情况下对我有用的解决方案,但至少 SO 上记录了正确的用法! 这将导致 Visual Studio 抛出有关无效参数的错误,除非您像这样添加“InProject”元数据:&lt;BindInputPaths Include="..."&gt;&lt;InProject&gt;false&lt;/InProject&gt; &lt;/BindInputPaths&gt; 请参阅:(***.com/questions/19515397/…) @SteveSheldon,这通常不是真的——例如,它对我来说就像今天的 VS2013 一样。具有命名绑定路径的 HeatDirectory 可能需要它? 如果我将它用作 msbuild 参数会怎样?目前我可以像这样使用单个源目录:/p:LinkerBindInputPaths=$outPath 如果我要构建 2 个以上的项目来分隔目录怎么办?那么使用/p:LinkerBindInputPaths=$outPath1 /p:LinkerBindInputPaths=$outPath2/p:LinkerBindInputPaths="$outPath1, $outPath2" 之类的方法是有意义的,但两者都不起作用,我也没有找到关于该参数的任何文档。

以上是关于我如何在 WiX 安装程序脚本中实际使用 LinkerBindInputPaths PropertyGroup的主要内容,如果未能解决你的问题,请参考以下文章

Wix,PostgreSQL 安装,执行 Postgresql 脚本

如何在 Wix 主要升级期间防止数据库丢失

如何使用 WIX 升级数据库?

如何在 wix 安装程序中卸载另一个程序?

使用 wix 安装程序,当用户在编辑框中输入内容时安装时我如何在设置过程中覆盖配置文件

如何使用 WiX 安装程序更改添加/删除程序名称?