Assembly stimmt nicht überein, obwohl die Assembly-Umleitung und die korrekte Version geladen wurden

8

Meine Konsolenanwendung verwendet System.Net.Http.Formatting v5.1.0.0, das von Newtonsoft.Json v4.5.0.0 abhängt. Meine App enthält jedoch v6.0.0.0 von Newtonsoft.Json (aus anderen Gründen).

Damit System.Net.Http.Formatting die neue Newtonsoft.Json-Version verwendet, habe ich der App.config eine Assembly-Umleitung hinzugefügt:

%Vor%

Immer noch bekomme ich die folgende Ausnahme:

%Vor%

Das Fusionsprotokoll zeigt, dass die korrekte Assembly geladen ist, aber aufgrund fehlender Übereinstimmung fehlschlägt:

%Vor%

Was kann ich tun, um dieses Missverhältnis zu beheben? Vielen Dank im Voraus.

Lösung

Mit der Weiterleitung war nichts falsch. Der einzige Hinweis war, dass es irgendwie nicht angewendet wurde, obwohl scheinbar alles wie erwartet funktionierte (beachten Sie, dass das Log sogar anzeigt, dass die richtige Konfigurationsdatei geladen ist). Das Problem war, dass diese Deklaration im Abschnitt AssemblyBinding für ein anderes Assembly-Problem angezeigt wurde:

%Vor%

Diese Zeile löste dieses andere Problem, aber irgendwie brach die JSON-Weiterleitung. Ich weiß nicht warum: Die "qualifyAssembly" Deklaration ist angeblich auch korrekt.

Das Entfernen dieser Deklaration hat jedoch dazu geführt, dass die Assembly-Umleitung funktioniert ...

    
Piedone 10.08.2014, 11:29
quelle

2 Antworten

5

Es gibt keinen Hinweis darauf, dass Ihr <bindingRedirect> in Kraft ist. Sie sollten sehen:

%Vor%

Es gibt keine Breadcrumbs in Ihrer Frage, aber was auch immer Sie bearbeitet haben, scheint nicht D: \ ConsoleApplication1 \ bin \ Debug \ ConsoleApplication1.exe.Config zu sein. Ungerade Laufwerksbuchstaben. Achten Sie auf ein Projekt, in dem bereits ein App.config-Projektelement vorhanden ist und Sie App1.config hinzufügen. So ähnlich.

    
Hans Passant 10.08.2014, 13:03
quelle
4

Ich wollte hier nur eine kleine Menge zusätzlicher Details hinzufügen, da dies ein besonders unangenehmes Problem ist und Knoblauch, Silberkugeln und Weihwasser knapp sind.

Wir haben kürzlich darauf hingewiesen und festgestellt, dass die Ursache ein schemafehlendes XML in der Datei app.config war, die aus einer fehlerhaften automatischen Zusammenführung resultiert, z. B.

%Vor%

Wir haben das Problem in der Datei nicht bemerkt, da es immer noch technisch gültiges XML ist und der Visual Studio-Parser sich nie beschwert hat.

Die Laufzeitbindungsroutine hat es jedoch abgelehnt, eine der Bindungsumleitungen anzuwenden (auch solche, die außerhalb des fehlerhaften Abschnitts angegeben sind). Darüber hinaus gibt es, wie oben erwähnt, in den Fusionsprotokollen keinen Hinweis darauf, dass die Laufzeitumgebung die Konfigurationsdatei nicht analysieren konnte. Es sieht die korrekten dlls und den Speicherort der Konfigurationsdatei, schlägt aber immer noch mit einer Nebenversionsabweichung fehl, als ob nie eine Umleitung vorgenommen worden wäre.

TL; DR - Wenn Sie dieses Verhalten erhalten, überprüfen Sie, ob Ihre Konfigurationsdatei-XML zu 100% perfekt ist - und nicht darauf vertrauen, dass die verschnörkelten Zeilen in VS alle aufdecken mögliches Problem.

    
silijon 13.09.2017 21:47
quelle

Tags und Links