【问题标题】:Wix - Reusable components between multiples featuresWix - 多个功能之间的可重用组件
【发布时间】:2012-02-28 15:07:22
【问题描述】:

考虑以下场景:

  • 项目通用库
    • CommonLib.dll
  • AExe 项目
    • CommonLib.dll
    • AExe.exe
  • BExe 项目
    • CommonLib.dll
    • BExe.exe

Project AExe 安装在 %ProgramFiles%\AExe\bin 和 BExe %ProgramFiles%\BExe\bin 但两者都使用相同的 .MSI 进行部署

如何将 CommonLib.dll 声明为通用组件,然后在 AExe Directory[Ref] 和 BExe Directory[Ref] 中重用它?

我想做的事:

<Fragment>
<Component Id="C.CommonLib.dll" Guid="*">
  <File Id="Fi.CommonLib.dll" Source="<path>CommonLib.dll" KeyPath="yes"/>
</Component>
<Directory Id="ProgramFilesFolder">
  <Directory Id="Di.AExe" Name="AExe">
    <Directory Id="Di.AExeBin" Name="bin">
      <ComponentRef Id="C.CommonLib.dll"/>
    </Directory>
  </Directory>
  <Directory Id="Di.BExe" Name="BExe">
    <Directory Id="Di.BExeBin" Name="bin">
      <ComponentRef Id="C.CommonLib.dll"/>
    </Directory>
  </Directory>
</Directory>
</Fragment>

但这不起作用,因为Directory 不允许Ref 作为孩子。你会如何编码?

P.S:我举了两个项目的例子,但实际上有更多的项目共享一个以上的公共库,这就是我问这个的原因:)

【问题讨论】:

标签: wix wix3.5


【解决方案1】:

从 Windows Installer Component table 可以看出,组件只能与一个目录关联。但是,没有什么能阻止您创建两个安装相同文件的不同组件:

<Component Id="CommonLib.dll.1" Directory="Di.AExeBin">
  <File Id="CommonLib.dll.1" Source="...\CommonLib.dll"/>
</Component>

<Component Id="CommonLib.dll.2" Directory="Di.BExeBin">
  <File Id="CommonLib.dll.2" Source="...\CommonLib.dll"/>
</Component>

(注意:我的示例是针对 wix3 的,您可以在其中使用 Directory="..." 属性,但当然您也可以将组件放在 Directory 父元素下。)

【讨论】:

  • 是的,我知道我可以做到这一点,我现在就这样做,只是想知道是否有更好的方法来重用组件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多