4

我们在 SomeDialog.wxs 文件中有一个 WiX 片段,它会提示用户输入一些信息。它在 InstallerUI.wxs 文件中控制对话框顺序的另一个片段中被引用。当然,Product.wxs 是我们的主文件。效果很好。

现在我有第二个 Visual Studio 2008 Wix 3.0 项目,用于另一个应用程序的 .MSI,它需要向用户询问相同的信息。我似乎无法找出共享文件的最佳方式,以便更改请求的信息将导致两个 .MSI 都获得新行为。

老实说,我无法判断合并模块、.wsi(包含)或 .wixlib 是否是正确的解决方案。我本来希望找到一个这样做的人的简单例子,但到目前为止我失败了。

编辑: 基于Rob Mensching 的wixlib博客条目,wixlib 可能是答案,但我仍在寻找如何做到这一点的示例。

4

2 回答 2

6

我对 .wixlib 选项非常满意。一旦我理解了 .wixlib 是什么,我只花了几分钟就完成了。
我做了以下事情:在VS2008中,添加->新建项目...类型为“WiX库项目”,名为SQLDialog。使用空<Fragment></Fragment>元素创建库 .wxs 文件。我将现有对话框中的 UI 元素(在我的主“WiX 项目”中)复制到 Fragment 元素中:

<Fragment>
  <UI>
    <Dialog Id="SQLServerPromptingDlg" ... Title="SQL Server Information" ...>
      <Control Id="Next" Type="PushButton" ... Text="!(loc.WixUINext)" />
      ...
    </Dialog>
  </UI>
</Fragment>

我将 wixlib 项目添加到 VS2008 的 Release Build 配置中。我从 Main WiX 项目中删除了 SQLDialog.wxs 文件,而是引用了 SQLDialog wixlib 项目。
当我重新编译解决方案时,主 WiX 项目的工作方式与以前完全相同!甜的!

然后我从我的另一个 WiX 项目中引用了 SQLDialog wixlib 项目并从那里使用它。工作得很好!Build Server 很高兴,因为共享的 .wixlib 项目是它正在编译的解决方案的一部分。因此,出于我们的目的,我认为这比“共享”目录要好。没有冒犯鲍勃。我很欣赏你的想法。

于 2010-05-11T16:41:15.427 回答
1

如果它只是一个文件,那么 .wixlib 可能会过大,因为它需要另一个 .wixproj 来构建它。在这种情况下,我所做的是将 .wxs 放在“共享”目录中,并使用“添加现有项目”命令中的“添加链接”下拉菜单将其添加到多个项目中。

于 2010-05-05T20:43:12.340 回答