Nach MSDN documentation,Assembly.LoadFrom BadImageFormatException - unterschiedliches Verhalten in .NET 4.0 und 4.5 (möglicherweise undokumentiert)
public static Assembly LoadFrom(string assemblyFile)
wirft BadImageFormatException
wenn
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
Eigentlich gibt es einen zusätzlichen Fall - loading Assembly, die für x86 von Assembly erstellt wird, die im x64-Modus ausgeführt wird. Vielleicht ist es in "keine gültige Versammlung" Aussage enthalten, ich weiß es nicht. Aber das ist ein vernünftiger Grund für eine Ausnahme.
Ok, aber in .NET 4.5 ist es nicht! Ich habe eine .NET 4.5 WPF App, die aus irgendeinem Grund verschiedene Anwendungen lädt. Es baut für jede CPU und ich starte es auf x64 Win 7. Ich habe es auf einer ausführbaren Datei getestet, die für .NET 4.0 x86 gebaut wurde, und es hat gut funktioniert. Aber als ich meine App auf .NET 4.0 umstellte, stürzte sie auf Assembly.Load
Methode ab!
Also, meine Frage ist, vermisse ich etwas? Wenn nicht, wie haben sie das getan - x86-Assembly vom x64-Prozess in .NET 4.5 geladen? Mir fehlt an dieser Stelle etwas Verständnis.
aktualisieren
Dank Hans Passant, ich habe meine Fehler herausgefunden. Tatsächlich ist das Verhalten von Assembly.Load
nicht anders. Es stellte sich heraus, ich habe keine Prefer 32-bit
Option in den Projekteinstellungen (oder Prefer32Bit Tag in .csproj Datei). Deshalb ist mein Prozess in .NET 4.5 ran in a 32-bit mode. Diese Einstellung war wahr, als ich WPF .NET 4.5 Projekt erstellt. Als ich dann zu .NET 4.0 switchte, wurde es inaktiv, weil es in .NET 4.0 keine solche Option gab. Und als ich zurück zu .NET 4.5 wechselte, wurde es false, das ist so, ich denke, aus Gründen der Kompatibilität.
"Wenn ich meine App auf .NET 4.0 umgestellt habe, meinst du .NET 4.5? ;) – HericDenis
Nein, es wurde ursprünglich für 4.5 gebaut, aber dann haben wir festgestellt, dass wir es brauchen, um auf 4.0 – EvAlex
zu arbeiten. Wenn dies ein Laufzeitproblem ist, ist es nicht speziell mit den gelieferten Compilern dieser Versionen verbunden. Nicht markiert. – leppie