Laden...

WindowsForms Programm sucht nach System.Interactive.Async4.0.0.0 statt 3.2.0.0

Erstellt von schuppsl vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.060 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 4 Jahren
WindowsForms Programm sucht nach System.Interactive.Async4.0.0.0 statt 3.2.0.0

Hello,

mal wieder ein DLL Problem - das möchte ich jetzt endgültig mal checken und in den Griff bekommen.

Also ich habe eine Windows Forms (.net 472) Anwendung, welche Funktionen von externen DLLs aufruft.
Extern bedeutet in diesem Falle, selbst programmiert.

Die externe DLL implementiert weitere, eigene DLL's. (Models etc)
Aus der externen DLL habe ich nun ein nuget Paket gemacht, welches dann in die Windows Anwendung von der lokalen nuget Source installiert wird.

Aktuell geht es um System.Interactive.Async

Diese ist abhängig vom EntityframeworkCore 2.2.4 und wird in der externen DLL mit diesem installiert.

Also externe DLL:
EntityFrameWorkCore2.2.4
System.Interactive.Async3.2.0

Wenn ich die externe DLL in meine Windows Forms Anwendung installiere, muss ich ja die beiden DLLs ebenfalls mit derselben Versionsnummer installieren.
Gesagt, getan.

Also externe DLL:
EntityFrameWorkCore2.2.4
System.Interactive.Async3.2.0

Forms Anwendung:
EntityFrameWorkCore2.2.4
System.Interactive.Async3.2.0

Auch in allen andere abhängigen DLLs:

EntityFrameWorkCore2.2.4
System.Interactive.Async3.2.0

Starte ich nun die Forms Anwendung und rufe die externe Funktion auf, dann:

Fehlermeldung:
{"Die Datei oder Assembly "System.Interactive.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)":"System.Interactive.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263"}

Ein Klassiker!

Also irgendwo wird nach der Version 4.0.0.0 gesucht und nicht gefunden.

Ich möchte die Ursache herausfinden.

Die steht in der InnerException:> Fehlermeldung:

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = System.Interactive.Async, Version=3.2.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263
(Fully-specified)
LOG: Appbase = file:///C:/Users/[user]/Documents/[Pfad]/Aufgabe1/bin/Debug/
LOG: Ursprünglicher PrivatePath = NULL
Aufruf von Assembly : Microsoft.EntityFrameworkCore, Version=2.2.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60.
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\Users[user]\D[Pfad]Aufgabe1\bin\Debug\Nasslack_Neu_Aufgabe_1.exe.Config
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet.
LOG: In der Anwendungskonfigurationsdatei wurde eine Umleitung gefunden. 3.2.0.0 wird nach 4.0.0.0 umgeleitet.
LOG: Verweis nach der Richtlinie: System.Interactive.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263
LOG: Die gleiche Bindung ist bereits aufgetreten und hat den Fehler hr = 0x80131040 verursacht.

Also, das ist doch die Lösung!
Prima.

Schaue ich in die App.config rein, dann steht da folgendes:

<dependentAssembly>
<assemblyIdentity name="System.Interactive.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

Autsch.

Wahrscheinlich wurde diese Version irgendwann mal zum Projekt hinzugefügt.
Ich war ja der Meinung, dass in der Anwendungskonfigurationsdatei die Version angepasst wird, wenn ich eine niedrige Version installiere (die alte vorher deinstalliere) -vor allem wenn ich die als Abhängigkeit in einem eigenen (oder fremden) nuget Paket angebe - und zwar ganz genau in der Version 3.2.0.0 und nicht ≥ 3.2.0.0.

Aber jetzt kommt meine Frage:
Warum ist das nicht der Fall?
Ist die App.config rein mein Metier?
Ich habe das so mit Sicherheit nicht dort eingetragen....

Bitte nicht hauen.Vielen Dank.

16.806 Beiträge seit 2008
vor 4 Jahren

NuGet setzt Binding Redirects automatisch beim hinzufügen von Paketen; entfernt diese aber nicht unbedingt beim Entfernen eines Pakets.

Ist die App.config rein mein Metier?

Natürlich.
Du bist der Entwickler; Du verantwortest den gesamten Code inkl. App.Config.

Ich habe das so mit Sicherheit nicht dort eingetragen....

Siehst ja in der Historie Deiner Quellcode-Verwaltung, wann und durch wen das passiert ist.