2012-02-28 119 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