webentwicklung-frage-antwort-db.com.de

"Referenz kann nicht aufgelöst werden:" System.Memory "oder" System.Memory "konnte nach einem Update auf Visual Studio 2017 Version 15.8 nicht gefunden werden

Für den Fall, dass es anderen helfen könnte, werde ich diese kleine Frage zu einem Problem beantworten, das nach einem Update von Visual Studio 2017 Version 15.7 auf Version 15.8 Preview in Xamarin.Android- und Xamarin.iOS-Projekten angezeigt wird.

Beispielschritte zur Veranschaulichung des Problems

  1. Erstellen Sie ein neues leeres Xamarin.Android- oder Xamarin.iOS-Projekt.
  2. Fügen Sie das NuGet-Paket Microsoft.AspNetCore.SignalR.Client.Core Version 1.0.0 zum Projekt hinzu.
  3. Verwenden Sie einen Typ aus dem NuGet-Paket im Projekt. Fügen Sie beispielsweise einer vorhandenen Methode die folgende Zeile hinzu:

    var connection = new Microsoft.AspNetCore.SignalR.Client.HubConnectionBuilder().Build();
    
  4. Versuchen Sie für Xamarin.Android, das Projekt in der Debug-Konfiguration zu erstellen. Erstellen Sie für Xamarin.iOS die App in der Debug-Konfiguration auf dem iPhone-Simulator und führen Sie sie aus.

Ergebnisse mit Visual Studio 2017 Version 15.7

Sowohl die Xamarin.Android-App als auch die Xamarin.iOS-App werden fehlerfrei erstellt und ausgeführt.

Ergebnisse mit Visual Studio 2017 Version 15.8 Vorschau 4

Bei Xamarin.Android schlägt der Build fehl:

Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `Microsoft.AspNetCore.Connections.Abstractions`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `Microsoft.AspNetCore.Connections.Abstractions`.
Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `Microsoft.AspNetCore.SignalR.Client.Core`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `Microsoft.AspNetCore.SignalR.Client.Core`.
Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `Microsoft.AspNetCore.SignalR.Common`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `Microsoft.AspNetCore.SignalR.Common`.
Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `Microsoft.AspNetCore.SignalR.Protocols.Json`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `Microsoft.AspNetCore.SignalR.Protocols.Json`.
Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `Microsoft.Extensions.Primitives`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `Microsoft.Extensions.Primitives`.
Xamarin.Android.Common.targets(1831,2): error XA2002: Can not resolve reference: `System.Memory`, referenced by `System.IO.Pipelines`. Please add a NuGet package or Assembly reference for `System.Memory`, or remove the reference to `System.IO.Pipelines`.

Für Xamarin.iOS wird die App erfolgreich auf dem Simulator gestartet. Die Debug-Ausgabe zeigt jedoch an, dass die App System.Memory nicht findet, wenn sie ausgeführt wird:

Could not find `System.Memory` referenced by Assembly `System.IO.Pipelines, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51`.
Could not find `System.Memory` referenced by Assembly `Microsoft.AspNetCore.SignalR.Client.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60`.
Could not find `System.Memory` referenced by Assembly `Microsoft.AspNetCore.SignalR.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60`.
Could not find `System.Memory` referenced by Assembly `Microsoft.Extensions.Primitives, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60`.
Could not find `System.Memory` referenced by Assembly `Microsoft.AspNetCore.Connections.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60`.
Could not find `System.Memory` referenced by Assembly `Microsoft.AspNetCore.SignalR.Protocols.Json, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60`.

Wie löse ich diese Fehler? Warum wurden diese Fehler nach der Aktualisierung von Visual Studio angezeigt?

7

Wie behebe ich diese Fehler?

Aktualisieren Sie das Microsoft.AspNetCore.SignalR.Client.Core NuGet-Paket in allen Projekten, die es verwenden, auf Version 1.0.1 oder höher, um diese Fehler zu beheben. Zum Beispiel:

  1. Gehen Sie zu Tools> NuGet Package Manager> NuGet-Pakete für Lösung verwalten> Updates .

  2. Aktualisieren Sie Microsoft.AspNetCore.SignalR.Client.Core auf Version 1.0.1 oder höher.

In Microsoft.AspNetCore.SignalR.Client.Core Version 1.0.1 ist die System.Memory NuGet-Abhängigkeit jetzt (> = 4.5.1) anstatt (> = 4.5.0). Und da System.Memory Version 4.5.1 enthält keine Platzhalterdateien mehr für Xamarin-Projekttypen , verwenden Xamarin-Projekte jetzt die .NET Standard 2.0-Assembly direkt aus dem NuGet-Paket. Dadurch werden die Fehler behoben, da die Xamarin-Projekte die System.Memory-Referenz jetzt erfolgreich finden können.

Warum traten diese Fehler im Nachhinein auf, nachdem ich Visual Studio aktualisiert hatte?

Die Fehler traten auf, weil die Xamarin SDK-Versionen in Visual Studio 2017, Version 15.7 und Version 15.8 eine schwierige Kompatibilitätsbeziehung mit den System.Memory NuGet-Paketversionen aufweisen. In Visual Studio 2017 Version 15.7 verwenden Xamarin.Android und Xamarin.iOS ihre eigenen integrierten Implementierungen der Typen aus diesem NuGet-Paket, sodass sie nicht auf die Assembly aus dem NuGet-Paket verweisen müssen. Das System.Memory NuGet-Paket Version 4.5.0 enthält dementsprechend Platzhalterdateien für Xamarin-Projekttypen, um Konflikte zu vermeiden.

Die in den aktuellen Xamarin SDK-Versionen integrierten Implementierungen decken jedoch noch nicht die gesamte Oberfläche des NuGet-Pakets ab. In Visual Studio 2017, Version 15.8, hat das Mono-Team diese integrierten Implementierungen vorübergehend ausgeblendet (durch mschalten auf internal und Entfernen der System.Memory-Fassadenassembly =). Dies bedeutet, dass Xamarin-Projekte jetzt stattdessen von den Implementierungen aus dem NuGet-Paket abhängen. Und das System.Memory NuGet-Paket Version 4.5.1 enthält dementsprechend nicht Platzhalterdateien für Xamarin-Projekttypen.

Beachten Sie außerdem, dass die integrierten Implementierungen in den Xamarin-SDKs werden in einer zukünftigen Version die gesamte Oberfläche des NuGet-Pakets abdecken . Die integrierten Implementierungen werden dann ausgeblendet und die Platzhalterdateien werden wieder zum NuGet-Paket hinzugefügt. In diesem Fall müssen Benutzer ihre NuGet-Pakete erneut aktualisieren. Diese nächste Änderung wird in Visual Studio 2017, Version 15.9 oder höher, vorgenommen.

5

Ich verwende VS Entreprise 2017 Version 15.9.1

Um das Problem zu lösen, dem ich gegenüber stehe (Referenz kann nicht aufgelöst werden: System.Buffers, referenziert von System.Memory. Fügen Sie ein NuGet-Paket oder eine Assemblyreferenz für System.Buffers hinzu oder entfernen Sie die Referenz auf System.Memory.), Befehl:

Install-Package System.Buffers -Version 4.5.0

https://www.nuget.org/packages/System.Buffers/

1
A. Blaise