2011-09-26 147 views
2

我正嘗試在GAC中使用WiX部署幾個第三方程序集。其中一些組件是混合組件。這樣做的常見方式似乎是將相應文件的assembly-attribute設置爲「net」。然而,這樣做的一個錯誤,這樣的產量在安裝過程中:安裝程序集到GAC的問題

Error 1938. An error occurred during the installation of assembly ...One or more modules of the assembly could not be found. HRESULT: 0x80131042. assembly interface: IAssemblyCacheItem, function : Commit, component: ... MSI (s) (A8:B0) [12:32:39:085]:.... assembly .... One or more modules of the assembly could not be found. HRESULT: 0x80131042. assembly interface: IAssemblyCacheItem, function: Commit, component:... 

我從供應商那裏得到了安裝組件安裝到GAC的說明是:

  1. 將所有的DLL(D1, d2,d3,...,dn)。
  2. 對這些dll的子集運行gacutil。

如果我走在GAC 「原始」 的樣子,對文件夾的內容之一是這樣的:

gac_32 \ D1 \ 0.0.0.0_271E3736135E91A2 \ d1.dll gac_32 \ D1 \ 0.0。 0.0_271E3736135E91A2 \ d2.dll gac_32 \ D1 \ 0.0.0.0_271E3736135E91A2 \ d3.dll

GACUTIL人發現d2.dll一個d3.dll需要被放置在相同的目錄中d1.dll並且具有automaticaly這樣做。

我該如何用wix做到這一點?我現在看到的唯一方法是將gacutil稱爲自定義動作,但這似乎不是一個好的解決方案。

謝謝 斯特凡

回答

4

萬一別人用這種掙扎:

要安裝了一個管理組件和一個或多個被引用的多個天然或混合的DLL做了一個多文件彙編託管程序集,在你WixSetup創建以下結構:

<Component Id="MyMultifileAssembly" Guid="abc"> 
     <File Id="ManagedAssembly" KeyPath="yes" Source="$(var.ThirdParty)\Managed.dll" Assembly=".net"/> 
     <File Id="UnmanagedAssembly1" KeyPath="no" Source="$(var.ThirdParty)\Unmanaged1.dll" /> 
     <File Id="UnmanagedAssembly2" KeyPath="no" Source="$(var.ThirdParty)\Unmanaged2.dll" /> 
</Component> 

兩個非託管的組件將轉到該託管DLL安裝到GAC文件夾。