【发布时间】: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:我举了两个项目的例子,但实际上有更多的项目共享一个以上的公共库,这就是我问这个的原因:)
【问题讨论】: