2012-02-28 121 views
3

倍数特征之间的可重用组件考虑以下情形:维克斯 -

  • 项目CommonLib
    • CommonLib.dll
  • 项目AExe
    • CommonLib.dll
    • AExe。 exe
  • 项目BExe
    • CommonLib.dll
    • BExe.exe

项目AExe安装在%ProgramFiles%\AExe\bin和BExe %ProgramFiles%\BExe\bin但两者都使用相同的.MSI

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

我想什么做的事:

<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的孩子。你会如何编码?

PS:我给的例子有2个项目,但在现实中有共享多个共同的lib更多的项目,这就是为什么我问的是:)

+0

看起来是http://stackoverflow.com/questions/4941602/features-installed-to-different-locations-but-referencing-the-same -components – 2012-02-28 19:13:46

回答

2

你可以从Windows安装程序告诉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在那里你可以使用目录=“...”属性,当然你但是,没有从创建其安装在同一个文件的两个不同的组件阻止你也可以将组件放在目录父元素下。)

+3

是的,我知道我可以做到这一点,我现在就这样做,想知道是否有更好的方式来重用组件 – 2012-02-29 07:47:36