2014-03-27 43 views
1

我構建了一個簡單的WIX安裝程序,用於部署exe和第三方DLL,並創建快捷方式。安裝程序似乎做工精細,並且用C的地方都在EXE和DLL文件夾中:\ Program Files文件(x86)的,但是當我嘗試運行應用程序,我得到一個錯誤:安裝WIX更改程序集名稱

System.IO.FileLoadException: Could not load file or assembly 'GACManagerApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'GACManagerApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

應用程序運行從IDE中很好,甚至從IDE bin目錄中的可執行文件,但用WIX部署後無法加載程序集。在預感上,我將dll從bin目錄複製到部署的位置,並開始工作。仔細觀察,看起來WIX正在爲第三方元數據做一些事情,因爲它部署了足夠的簽名以使exe不能再加載它。下面是在WXS的組件的定義:

<Component Id="GACManagerApi"> 
<File Id="GACManagerApiDLL" Name="GACManagerApi.dll" Source="$(var.GHCComponentManager.TargetPath)" /> 
</Component> 

我也注意到,在DLL特性的細節是不同的,有文件說明,產品名稱和原始文件名被更改爲我的可執行文件,而不是組裝的原始值。

我是否在我的wsx中丟失了導致這種情況發生的事情?

+0

您確定在wix編譯期間拉動了正確版本的ghc組件管理器嗎?從正確的位置等?我還沒有看到wix操縱元數據或任何類型的東西。 – Isaiah4110

+0

這不是組件管理器本身的問題,但是,它應該總是拉動構建版本,並且只有一個版本。它正在使用的程序集,var.GHCComponentManager.TargetPath,應該是引用的版本,因爲我使用複製本地,它將把它放在bin目錄中的EXE。這是我可以複製和粘貼到安裝版本的bin版本,並且一切正常。 –

+0

你能用你的wix腳本更新這個問題嗎? – Isaiah4110

回答

1

我想通了。問題在於我如何定義Source屬性。這個提示真的應該在文件屬性細節中,但是我太過於用我的假設來看它了。我正在閱讀一些其他文件,談論當我注意到時從項目外拉動組件。

我定義源作爲:

Source="$(var.GHCComponentManager.TargetPath)" 

字面翻譯爲我釋放可執行的完整路徑。通過File元素的Name屬性,它有效地將我的可執行文件移動到發佈位置,並將其重命名爲GACManagerApi.dll。正確的來源應該是:

Source="$(var.GHCComponentManager.TargetDir)\GACManagerApi.dll" 
+0

我通常會忽略'Name'屬性。重新命名的必要性很少。 –