Laden...

Xamarin.Forms: Versionskonflikt mit mscorlib (2.0.5.0 vs. 4.0.0.0)

Erstellt von pinki vor 6 Jahren Letzter Beitrag vor 6 Jahren 4.525 Views
pinki Themenstarter:in
709 Beiträge seit 2008
vor 6 Jahren
Xamarin.Forms: Versionskonflikt mit mscorlib (2.0.5.0 vs. 4.0.0.0)

Hallo zusammen,

ich erstelle gerade eine App mit Xamarin.Forms für Android und UWP.
Mir geht es hier aktuell um den Android-Teil.

Ein der App ähnliches Programm mit erweitertem Funktionsumfang ist auch noch in WPF umgesetzt.

Große Teile von Logik und Modell teilen sich die WPF- und die Xamarin-Forms-Anwendung.

Nachdem ich meine Zeit der WPF-Anwendung gewidmet habe, habe ich mich mal wieder an die App gesetzt. Leider erhalte ich nun beim Build folgende Fehlermeldung:

Fehlermeldung:
No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.

Die Folge daraus ist eine sofort abstürzende App.

Um herauszufinden, was diesen Konflikt verursacht, habe ich ein neues Xamarin.Forms-Projekt erstellt und der Reihe nach alle NuGet-Pakete sowie die von mir erstellten Bibliotheken hinzugefügt und nach jedem Hinzufügen die App gebaut und ausgeführt. Jedes Mal hat die App funktioniert und der Konflikt trat nicht auf.

Erst als ich das Shared Project, mit dem App-Code hinzugefügt habe, erhielt ich erneut den Fehler.

Wie kann ich am effektivsten herausfinden, was der Grund für den Konflikt ist?

Meine Projektstruktur ist, falls das hilft, wie folgt:*Applications *- AppName.Android (referenziert Behaviors.Xamarin.Forms, Utilities.Core, Utilities.Xamarin.Forms, Services, AppName, AppName.Core) *- AppName.UWP (noch nackt) *- AppName.WPF (referenziert Behaviors.WPF, Controls.WPF, Converters.WPF, Utilities.Core, Utilities.WPF und AppName.Core)

*Shared *- Utilities *- - Utilities.Core (Portable) *- - Utilities.WPF (referenziert Utilities.Core und Utilities.Shared) *- - Utilities.Xamarin.Forms (Portable, referenziert Utilities.Core und Utilities.Shared) *- - Utilities.Shared (Shared Project) *- Behaviors *- - Behaviors.WPF (referenziert Utilities.Core und Utilities.WPF) *- - Behaviors.Xamarin.Forms (referenziert Utilities.Core und Utilities.Xamarin.Forms) *- Controls.WPF (referenziert Utilities.Core, Utilities.WPF und Converters.WPF) *- Converters.WPF (referenziert Utilities.Core und Utilities.WPF) *- AppName.Core (Portable, referenziert Utilities.Core) *- Services (Shared Project) *- AppName (Shared Project)

Ich verwende Xamarin.Forms in Version 2.3.4.247.
Die dazugehörigen Android-Pakete haben Version 25.4.0.1.
Xamarin.Build.Download liegt in Version 0.4.6 vor.

Ich bin für jeden Hinweis dankbar.

Viele Grüße

Micha

pinki Themenstarter:in
709 Beiträge seit 2008
vor 6 Jahren

Okay... Ich bin nun schon mal ein Stückchen weiter.
Ich habe mit DependencyWalker.NET mal die DLLs des Projekts unter die Lupe genommen.

Dieser sagt mir, dass ich in der Utilities.Xamarin.Forms.dll mscorlib in Version 4.0.0.0 nutze.
Diese wird durch System.Runtime.InteropServices mit eingebunden.

Jetzt muss ich mal gucken, wie ich davon wieder die richtige Version eingebunden bekomme...

pinki Themenstarter:in
709 Beiträge seit 2008
vor 6 Jahren

So sieht bei mir die Targets-Ansicht der Portable Libraries aus.
Ich nutze Visual Studio 2017 Professional. Eigentlich sollten da doch genug Targets dabei sein, oder täusche ich mich?
Wenn ich eine Portable Library in 'nem anderen Projekt anlege, dann sehe ich die Targets.
Mal sehen, wo da wieder das Problem ist...

849 Beiträge seit 2006
vor 6 Jahren

Hallo Pinki,

das muss nicht der wirkliche Grund für deine Abstürze sein.
Ich habe ein Project das ca.10 dieser Meldungen raushaut, und trotzdem einwandfrei läuft.

Ich habe allerdings auch nie herausgefunden woran das genau lag, habs dann irgendwann aufgegeben.

Du solltest vielleicht mal versuchen, dich an das AppDomain UnhandledException Event dranzuhängen und/oder mit dem fuslogvw schauen was das Assembly Binding so treibt.

pinki Themenstarter:in
709 Beiträge seit 2008
vor 6 Jahren

Hallo unconnected,
vielen Dank für die Tipps. Das werde ich mal versuchen.
Würde die App laufen, wäre mir das wahrscheinlich nicht mal aufgefallen.
Leider stürzt sie direkt nach dem Start ab.

pinki Themenstarter:in
709 Beiträge seit 2008
vor 6 Jahren

Guten Morgen,
die App läuft nun wieder. 🙂

Der DependencyWalker.NET zeigt zwar immer noch an, dass die mscorlib.dll in Version 4.0.0.0 referenziert wird, die App stürzt aber nicht mehr ab.

Was wurde verändert?
Als ich mit der WPF-Anwendung beschäftigt war, kam irgendwann die Warnung, dass ich obsolete Methoden nutze. Diese sind Marshal.SizeOf(Type) und Marshal.PtrToStructure(IntPtr, Type). Mir wurde geraten die generische Variante zu nutzen, was ich dann auch tat.
Die Nutzung der generischen Variante brachte dann die Xamarin.Forms-App zum Absturz.

Nun habe ich die Methode, die die Marshal-Funktionalitäten nutzt, von dem Utilities.Core- ins Utilities.Shared-Projekt verschoben und mit #if WPF einen entsprechenden "Schalter" eingebaut, sodass die generischen Methoden nur noch in Utilities.WPF genutzt werden.