2011-03-29 100 views
4

安裝程序我正在試圖從VS2010的.NET 4安裝項目安裝Windows服務,當這個錯誤:在初始化安裝發生System.BadImageFormatException當從VS2010安裝項目

「例外:System.BadImageFormatException。無法加載文件[文件名] .exe或其某個依賴項。此程序集由比當前加載的運行時更新的運行時構建,無法加載。「

我找不出是什麼原因造成這種情況。我的解決方案中的所有項目都是針對.NET Framework 4編譯的,而安裝程序解決方案依賴項需要.NET 4.我已清理/重建解決方案和項目無濟於事。有什麼明顯的我失蹤?

回答

3

您可能有錯誤的安裝程序先決條件。轉到安裝項目的屬性窗口,單擊構建下的先決條件...,並確保已選中.NET Framework 4。您可能仍然會檢查.NET Framework 3.5 SP1。您可能還需要使用Windows Installer 4.1(在同一個對話框中)。

還要檢查,以確保在啓動條件的.NET Framework版本百分點至4

1

也許你可以嘗試創建一個[yourfile.exe]一旁的.config [yourfile.exe]是這樣的:

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0.30319" /> 
    </startup> 
</configuration> 

或者您正在安裝的機器沒有安裝Framework 4?

6

如果您的安裝程序正在安裝64位dll,則會發生這種情況。

如果將64位受管自定義操作添加到安裝項目,Visual Studio生成過程會將InstallUtilLib.dll的32位版本作爲InstallUtil嵌入到MSI中。反過來,加載32位.NET Framework以運行64位受管自定義操作,並導致BadImageFormatException異常。

解決方法是將32位InstallUtilLib.dll替換爲64位版本。

  1. 從Windows Installer SDK中打開在Orca中產生的.msi。
  2. 選擇二進制表。
  3. 雙擊記錄InstallUtil的單元格[Binary Data]。
  4. 確保選擇了「從文件名讀取二進制文件」並單擊瀏覽按鈕。
  5. 瀏覽到%WINDIR%\ Microsoft.NET \ Framework64 \ v2.0.50727。
  6. Framework64目錄僅安裝在64位平臺上並對應於64位處理器類型。
  7. 選擇InstallUtilLib.dll。
  8. 單擊打開按鈕。
  9. 單擊確定按鈕。
+0

謝謝。我現在在這個問題上掙扎了好幾天,並且解決了這個問題。 – Tim 2013-03-06 22:13:49

+0

我也有這方面的困難,你的解決方案爲我工作。似乎應該有一個更簡單的方法 - 或者至少是一種自動化的方法 - 但現在我將採取什麼行動。謝謝! – Tim 2013-03-13 17:19:20

+0

@Tim如果和我一樣,你想自動執行此操作,那麼可以從https://code.msdn.microsoft.com/windowsdesktop/CSBrowserHelperObject-59c189a2#content獲取一段javascript代碼片段(閱讀底部附近)。將Fix64bitInstallUtilLib.js文件和64位版本的InstallUtilLib.dll從適當的版本.Net框架目錄中添加到您的安裝項目中。然後調用'Fix64bitInstallUtilLib.js'作爲安裝項目的後期構建事件。詳情請參閱樣本。 – snark 2016-11-22 15:33:43

0

另外,如果你仍然面臨這個問題,你可以設置轉到VS2010,在生成 - >配置管理器下,並將項目平臺設置爲「任何CPU」。

轉到解決方案資源管理器並單擊您的MSI安裝項目,您將能夠在屬性下看到「TargetPlatform」。將其設置爲x64。重建你的MSI項目並試一試。

1

我避免不得不使用Orca破解安裝程序(這使得我的簽名btw無效)。我剛剛在我的解決方案中添加了一個名爲「InstallHelper」的新可執行項目,該項目以x86模式編譯並將自定義操作代碼添加到該項目中。然後,我將該項目的主要輸出添加到安裝程序,並將安裝項目中的自定義操作設置爲針對主輸出而不是主應用程序的64位輸出運行。現在我的32位和64位安裝項目運行良好。