Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Xamarin.Forms: Versionskonflikt mit mscorlib (2.0.5.0 vs. 4.0.0.0)
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

Themenstarter:

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

beantworten | zitieren | melden

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:
Fehler
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
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

Themenstarter:

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

Themenstarter:

beantworten | zitieren | melden

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...
Attachments
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pinki am .
private Nachricht | Beiträge des Benutzers