System.BadImageFormatException: imansible caricare file o assembly (da installutil.exe)

Sto cercando di installare un servizio di Windows utilizzando InstallUtil.exe e sto ricevendo il messaggio di errore

System.BadImageFormatException: imansible caricare il file o l’assembly ‘ {xxx.exe} ‘ o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.

Cosa dà?


EDIT: (non per OP) Il messaggio completo estratto da dup ottiene più hit [per googleability]:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C: \ xxx.exe Utilità di installazione Microsoft (R) .NET Framework Versione 4.0.30319.1 Copyright (c) Microsoft Corporation. Tutti i diritti riservati.

Si è verificata un’eccezione durante l’inizializzazione dell’installazione: System.BadImageFormatException: Imansible caricare il file o l’assembly ‘file: /// C: \ xxx.exe’ o una delle sue dipendenze. È stato effettuato un tentativo di caricare un programma con un formato errato.

Qualche altro dettaglio per completezza nel caso in cui aiuti qualcuno …

Si noti che il motivo più comune per questa eccezione in questi giorni è il tentativo di caricare una DLL specifica ( /platform:x86 ) a 32 bit in un processo che è a 64 bit o viceversa (vale a dire una specifica a 64 bit ( /platform:x64 ) DLL in un processo che è a 32 bit). Se la tua platform non è specifica ( /platform:AnyCpu ), questo non si verificherà (supponendo che nessuna dipendenza referenziata sia di un testimone sbagliato).

In altre parole, in esecuzione:

% Windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ installutil.exe

o:

% windir% \ Microsoft.NET \ Framework 64 \ v2.0.50727 \ installutil.exe

non funzionerà (sostituire in altre versioni di framework: v1.1.4322 (solo a 32 bit, quindi questo problema non si pone) e v4.0.30319 come desiderato in precedenza).

Ovviamente, come indicato nell’altra risposta, sarà necessario anche il numero di versione .NET installutil si sta utilizzando per essere> = (preferibilmente =) quello del file EXE / DLL su cui si sta eseguendo l’installazione.

Infine, si noti che in Visual Studio 2010, gli strumenti genereranno automaticamente i binari x86 ( anziché qualsiasi CPU come in precedenza ).

Dettagli completi di System.BadImageFormatException (dicendo che l’unica causa è la bontà non corrispondente è davvero una grossolana semplificazione!).

Un altro motivo per una BadImageFormatException in un programma di installazione x64 è che in Visual Studio 2010, il tipo di progetto di installazione .vdproj predefinito genera uno shim InstallUtilLib 32 bit, anche su un sistema x64 (Ricerca di azioni personalizzate gestite a 64 bit per lanciare un sistema. Eccezione BadImageFormatException “nella pagina).

Assicurati che il nuovo Framework (quello con cui hai compilato la tua app) sia il primo nel PERCORSO. Questo ha risolto il problema per me. Trovato qui: http://www.issociate.de/board/post/280574/Installutil_System.BadImageFormatException.html

Penso che stai usando la versione a 64 bit dello strumento per installare un’applicazione a 32 bit. Ho anche affrontato questo problema oggi e ho usato questo percorso Framework per soddisfare.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

e dovrebbe installare la tua applicazione a 32 bit bene.

Grazie

Sachin Kalia

OK, questo è il problema che ho avuto, e, cosa lo ha risolto, sembra molto rilevante per quanto sopra.

Sto usando Visual Studio 2010 Express. Ho scritto un servizio di test che non ha fatto davvero nulla. Era solo pratica per la cosa reale dopo.

Ho scritto il servizio e ho provato ad installarlo usando installutil.exe e ho ricevuto il seguente errore:

System.BadImageFormatException: imansible caricare il file o l’assembly ‘{filename.exe}’ o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.

Finora lo stesso dell’autore originale.

L’osservazione di Ruben sopra l’output a 32 bit di Visual Studio 2010 è stata la salvezza qui.

Ho usato la versione a 64 bit di installutil.exe e abbastanza sicuro, l’output della build di Visual Studio 2010 era a 32 bit. Per aggiungere un piccolo valore in più, puoi trovare la versione a 32 bit del framework .NET più recente e il file installutil.exe associato nella installutil.exe C: \ Windows \ Microsoft.NET \ framework . L’utilizzo di questa versione di installutil.exe risolto il problema; il servizio installato senza intoppi!

Spero che questo aiuti qualcun altro là fuori.

Nel caso in cui aiuti chiunque, sono stato in grado di risolvere questa stessa eccezione usando questa risposta a una domanda simile, ma non ho ottenuto l’eccezione dall’uso di installutil.exe.

Ho avuto lo stesso problema. Sto usando il comando standard per l’esecuzione. Stava chiamando la ro run X64 contro i test X86. Dovevo specificare l’X86 e non la versione X64 di nunit-runner.

Riassumendo, sia la piattaforma Build che Project \ Build \ devono essere impostate su x64 per installare correttamente il servizio a 64 bit sul sistema a 64 bit.

Il mio problema era diverso Questo si è verificato dopo un arresto imprevisto della mia macchina Windows 7. Ho eseguito una soluzione pulita ed è andata come previsto.

Dopo aver provato tutte le soluzioni menzionate, ho trovato il PlatformTarget qualche modo aggiunto alla configurazione AnyCPU nel mio progetto .csproj.

  pdbonly true bin\Release\ TRACE prompt 4 x64  

Rimozione della linea ha funzionato per me.