他の人の役に立つかもしれない場合は、Visual Studio 2017バージョン15.7からバージョン15.8プレビューへの更新後にXamarin.AndroidおよびXamarin.iOSプロジェクトで発生する可能性のある問題について、この小さな質問に答えます。
プロジェクトでNuGetパッケージのタイプを使用します。たとえば、次の行を既存のメソッドに追加します。
var connection = new Microsoft.AspNetCore.SignalR.Client.HubConnectionBuilder().Build();
Xamarin.Androidの場合、デバッグ構成でプロジェクトをビルドしてみます。 Xamarin.iOSの場合は、iPhoneシミュレーターのデバッグ構成でアプリをビルドして実行します。
Xamarin.AndroidアプリとXamarin.iOSアプリの両方がビルドされ、エラーなしで実行されます。
Xamarin.Androidの場合、ビルドは失敗します。
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`.
Xamarin.iOSの場合、アプリはシミュレーターで正常に起動しますが、デバッグ出力は、アプリの実行中にSystem.Memoryが見つからないことを示しています。
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`.
これらのエラーを解決するにはどうすればよいですか?フォローアップとして、Visual Studioを更新した後にこれらのエラーが表示されたのはなぜですか?
これらのエラーを解決するにはどうすればよいですか?
これらのエラーを解決するには、それを使用するすべてのプロジェクトでMicrosoft.AspNetCore.SignalR.Client.Core NuGetパッケージをバージョン1.0.1以降に更新します。例えば:
Tools> NuGet Package Manager> Manage NuGet Packages for Solution> Updatesに移動します。
Microsoft.AspNetCore.SignalR.Client.Coreをバージョン1.0.1以降に更新します。
Microsoft.AspNetCore.SignalR.Client.Coreバージョン1.0.1では、System.Memory NuGet依存関係が(> = 4.5.0)ではなく(> = 4.5.1)になりました。また、System.Memoryバージョン4.5.1 Xamarinプロジェクトタイプのプレースホルダーファイルは含まれなくなりました のため、XamarinプロジェクトはNuGetパッケージから直接.NET Standard 2.0アセンブリを使用するようになります。これで、XamarinプロジェクトがSystem.Memory参照を正常に見つけることができるため、エラーが解決されます。
フォローアップとして、Visual Studioを更新した後にこれらのエラーが表示されたのはなぜですか?
エラーは、Visual Studio 2017バージョン15.7およびバージョン15.8のXamarin SDKバージョンが、System.Memory NuGetパッケージバージョンとのトリッキーな互換性関係を持っているために表示されました。 Visual Studio 2017バージョン15.7では、Xamarin.AndroidとXamarin.iOSは、そのNuGetパッケージの型の独自の組み込み実装を使用するため、NuGetパッケージのアセンブリを参照する必要はありません。 System.Memory NuGetパッケージバージョン4.5.0には、Xamarinプロジェクトタイプのプレースホルダーファイルが含まれているため、競合を回避できます。
ただし、現在のXamarin SDKリリースの組み込み実装は、NuGetパッケージの全表面をまだカバーしていません。したがって、Visual Studio 2017バージョン15.8の場合、Monoチームはこれらの組み込み実装を一時的に隠しました( internal
に切り替える および System.Memoryファサードアセンブリを削除する =)。これは、XamarinプロジェクトがNuGetパッケージの実装に依存するようになったことを意味します。そして、それに応じてSystem.Memory NuGetパッケージバージョン4.5.1 しない Xamarinプロジェクトタイプのプレースホルダーファイルを含めます。
Xamarin SDKの組み込み実装willは、NuGetパッケージの全表面をfutureリリースでカバーすることを覚えておいてください。その後、組み込みの実装が表示され、プレースホルダーファイルがNuGetパッケージに追加されます。その場合、ユーザーはもう一度NuGetパッケージを更新する必要があります。次の変更は、Visual Studio 2017バージョン15.9以降で行われます。
VS Entreprise 2017バージョン15.9.1を使用しています
私が直面する問題を解決するには(参照を解決できません:System.Buffers
、System.Memory
によって参照されます。System.Buffers
のNuGetパッケージまたはアセンブリ参照を追加するか、System.Memory
への参照を削除してください。)、このコマンドでSystem.Buffersパッケージをインストールします。
Install-Package System.Buffers-バージョン4.5.0