System.BadImageFormatException:無法載入文件或程序集(來自 installutil.e…
我正在嘗試使用 InstallUtil.exe 安裝 Windows 服務並收到錯誤消息
System.BadImageFormatException: 無法載入文件或程序集“
{xxx.exe}”或其依賴項之一。試圖載入格式不正確的程序。是什麼賦予了?
編輯:(不是由 OP)從 dup 中提取的完整消息獲得更多點擊 [for googleability]:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\xxx.exe Microsoft (R) .NET Framework 安裝實用程序版本 4.0.30319.1 版權所有 (c) Microsoft Corporation。版權所有。
初始化安裝時發生異常:System.BadImageFormatException:無法載入文件或程序集“file:///C:\xxx.exe”或其依賴項之一。試圖載入格式不正確的程序..
確保最新的框架(您編譯應用程序時使用的框架)位於 PATH 的第一位。這為我解決了問題。(在論壇上找到)
一些更完整的細節,以防它幫助某人……
請注意,目前此異常的最常見原因是嘗試將 32 位特定 (
/platform:x86) DLL 載入到 64 位程序中,反之亦然(即,將 64 位特定 (/platform:x64) DLL載入到32 位)。如果您platform是非特定的 (/platform:AnyCpu),則不會出現這種情況(假設沒有引用的依賴項是錯誤的位數)。換句話說,執行:
%windir%\Microsoft.NET\Framework\v2.0.50727\installutil.exe
要麼:
%windir%\Microsoft.NET\Framework 64 \v2.0.50727\installutil.exe
將不起作用(替換為其他框架版本:(
v1.1.4322僅限 32 位,因此不會出現此問題)並且v4.0.30319如上文所述)。顯然,正如另一個答案所涵蓋的那樣,您還需要
installutil您正在執行的 .NET 版本號 >=(最好是 =)您正在執行安裝程序的 EXE/DLL 文件的版本號。最後,請注意,在 Visual Studio 2010 中,該工具將預設生成 x86 二進製文件(而不是之前的任何 CPU)。
System.BadImageFormatException 的完整細節(說唯一的原因是不匹配的咬痕真的是過於簡單化了!)。
x64安裝程序
BadImageFormatException下的另一個原因是,在 Visual Studio 2010 中,預設安裝項目類型會生成 32 位填充程序,即使在 x64 系統上也是如此(搜尋“64 位託管自定義操作引發 System.BadImageFormatException 異常”這頁紙)。.vdproj``InstallUtilLib