2016-07-09 4 views
0

Ich bin verwirrt über eine Ausnahme, die ich in einem ziemlich einfachen Projekt von Rx bekomme.BadImageFormatException in System.Reactive.Core.dll

Ich googelte die BadImageFormatException und fand, dass es ausgelöst wird, wenn versucht wird, eine plattformspezifische Assembly in einen inkompatiblen Prozess zu laden.

Die Plattformeinstellungen meines Projekts sind "Any CPU" obwohl, und System.Reactive.Core.dll selbst ist natürlich auch.

Die Top-Stack-Trace ist in Rx:

enter image description here

die Quellen für die

lesen
protected override void OnNextCore(T value) 
    { 
     _onNext(value); 
    } 

_onNext ein Action<...> zu sein.

Mein direktes Problem ist, dass ich nicht weiß, wie man sieht, welche Assembly tatsächlich nicht geladen wird - die Information ist nicht in der Ausnahme, die ich bekomme, und ich weiß nicht, woher ich sonst noch bekomme .

Ich glaube nicht, dass es wirklich etwas über Rx ist, aber was ist das?

Wer irgendwelche Ideen?

EDIT 1:

Hier ist das Ergebnis fuslogvw auf einem Lauf nicht-Debugger, auf „Zeige alle Bindungen“, zusammen mit dem Stack-Trace Ich bin von der Ausnahme bekommen. Das Setzen von fuslogvw, um nur fehlerhafte Bindungen anzuzeigen, gibt mir überhaupt nichts.

enter image description here

EDIT 2:

ich auch sicher gemacht "bevorzugt 32-Bit" in allen Baugruppen ausgeschaltet ist, die von mir ist, vor allem der Hauptkonsole App.

EDIT 3:

Absolut verblüffend: die Quellen zu einer neuen Lösung mit allen Projekten direkt aus dem Assistenten brach ich jetzt die Lösung nach unten, entfernt alle Abhängigkeiten einschließlich rx und kopieren kleistere - es ist immer noch Ereignis.

Ich versuchte es auf zwei anderen Maschinen, immer noch passiert.

Was zum Teufel ist das !?

Ich meine Verzweiflung, hier sind die Quellen. Vielleicht hat jemand klüger als ich ist neugierig genug:

source code

Antwort

1

der Regel (und damit meine ich nicht immer), die BadImageFormatException geworfen wird, wenn die Anordnung beschädigt, oder der "Bitness" (dh 32-bit, 64-bit) ist anders, Mit anderen Worten, die ausführende Assembly wird gegen eine andere "Bitness" kompiliert als die geladene Assembly.

In Visual Studio, obwohl Sie die Option Any CPU ausgewählt haben, überprüfen Sie, ob die Prefer 32 bit festgelegt ist oder nicht. Es könnte sein, dass in Ihrer Anwendung noch eine Mischung aus 32-Bit- und 64-Bit-Assemblys kompiliert wird.

dies auf dem Prefer 32 bit Feld für weitere Informationen siehe: What is the purpose of the "Prefer 32-bit" setting in Visual Studio 2012 and how does it actually work?

Eine weitere Möglichkeit, Ihre Baugruppen zu überprüfen herunterladen und installieren Sie mehr über die .NET-Assembly ein nettes Tool namens Assembly Information, die Ihnen sagen.

+0

Diese wurden tatsächlich aktiviert, aber das Unscharfschalten hat nichts geändert. Assembly Information ist ein cooler Take, aber seltsamerweise scheint es nicht möglich zu sein, Assemblys zu öffnen, die mit "prefer 32-bit" kompiliert wurden. Habe immer noch keine Ahnung was los ist. Ich habe dafür gesorgt, dass ich alles von Grund auf neu zusammengestellt habe. – John

+0

Dann stellt sich die Frage, auf welche anderen Plattformen könnte es ausgerichtet sein? Ist es vielleicht mit einem .NET kompiliert, das nicht für Windows Desktop aber für Mobile oder etwas anderes vielleicht ist? –

+0

Framework ist 4.5.2 und es ist eine Konsolen-App. – John

Verwandte Themen