myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » WindowsForms Programm sucht nach System.Interactive.Async4.0.0.0 statt 3.2.0.0
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
schuppsl
myCSharp.de-Mitglied

Dabei seit: 10.12.2007
Beiträge: 758
Entwicklungsumgebung: VS2017


schuppsl ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Zitat:
<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.
10.10.2019 16:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Zitat von schuppsl:
Ist die App.config rein mein Metier?

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

Zitat von schuppsl:
Ich habe das so mit Sicherheit nicht dort eingetragen....

Siehst ja in der Historie Deiner Quellcode-Verwaltung, wann und durch wen das passiert ist.
10.10.2019 18:21 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.04.2020 20:14