9

Ich schrieb eine DLL in VS 2005, die von einem anderen Programm geladen wird, das in VS 2003 entwickelt wurde. Wenn das Programm versucht, meine DLL zu laden, wirft es eine System.BadImageFormatException: The format of the file 'Foo.dll' is invalid.System.BadImageFormatException: Wie behebt man .NET-Versionskonflikte?

Ich suchte SO und Google, und es scheint, dass die andere Version von .NET der Schuldige ist. Meine Frage ist: Wie repariere ich das?

(ich das Programm nicht ändern kann 2003 in VS entwickelt)

+0

Dieser Link war auch hilfreich: http://devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/working-with-net-1-1-in-visual-studio-2008-and-team -server.aspx – joshdick

+0

Eine native (nicht verwaltete) Bibliothek mit einer anderen Wortgröße kann diese Ausnahme ebenfalls auslösen. Sie müssen eine Version für die richtige Wortgröße erhalten oder die passende Hosting-Anwendung erstellen. – Pekka

Antwort

7

Kompilieren Sie das VS2005-Projekt mit der gleichen .Net-Version, die Ihr VS2003-Projekt verwendet. Oder, je nach Größe Ihres VS2003-Projekts, reflektorieren und neu schreiben. Das ist bei Projekten hier üblich, wo aus irgendeinem obskuren Grund keine VSS-Version mehr verfügbar ist.

+0

"Kompilieren Sie das VS2005-Projekt mit derselben .Net-Version wie Ihr VS2003-Projekt." Kannst du mir bitte erklären, wie das geht? Ich sehe nicht, wie man die .NET Version meines Projektes wählt. – joshdick

+0

Klicken Sie mit der rechten Maustaste auf Ihr Projekt in VS, auf der ersten Registerkarte können Sie das Zielframework auswählen. –

+0

Danke, Markus. Obwohl das in VS 2005 nicht funktionierte, funktionierte es in der Version 2008. Ich schätze Ihre Hilfe. – joshdick

17

ich diesen Fehler habe, wenn ich die 64-Bit-Version der CLR ausgeführt wurde, und zu versuchen, eine Anordnung zu laden, die nur 32 Bit markiert wurden. Die spezifische Assembly in meinem Fall war die Oracle.DataAccess.dll, die als Teil von ODP.NET kommt.

+0

Ich bekomme den gleichen Fehler (mit einer anderen Baugruppe), haben Sie eine Lösung dafür? – Marek

+1

Sie müssen nur sicherstellen, dass Sie die 32-Bit-CLR ausführen, wenn Sie 32-Bit-Assemblys laden –

+1

Dies war die Antwort auf mein Problem. Ich hatte dies schon eine ganze Weile nicht mehr gesehen, aber wenn man COM interop benutzt, ist es ziemlich normal, dass man in dieses Szenario kommt, wenn man die Konfigurationskonfiguration 'Any CPU' verwendet und dann auf einem 64-Bit-Server installiert. Die x86-Konfigurationen sind in diesen Fällen nützlich. –

14

LÖSUNG: Wenn Sie auf IIS7 sind, klicken Sie mit der rechten Maustaste/Erweiterte Einstellungen auf den spezifischen Anwendungspool der Website und wählen Sie Wahr bei 32-Bit-Anwendungen aktivieren. Es sollte funktionieren.

Verwandte Themen