web-dev-qa-db-ja.com

Visual Studio 2017バージョン15.8プレビューに更新した後、「参照を解決できません: `System.Memory`」または「` System.Memory`が見つかりませんでした」

他の人の役に立つかもしれない場合は、Visual Studio 2017バージョン15.7からバージョン15.8プレビューへの更新後にXamarin.AndroidおよびXamarin.iOSプロジェクトで発生する可能性のある問題について、この小さな質問に答えます。

問題を示すための手順の例

  1. 新しい空のXamarin.AndroidまたはXamarin.iOSプロジェクトを作成します。
  2. Microsoft.AspNetCore.SignalR.Client.Coreバージョン1.0.0 NuGetパッケージをプロジェクトに追加します。
  3. プロジェクトでNuGetパッケージのタイプを使用します。たとえば、次の行を既存のメソッドに追加します。

    var connection = new Microsoft.AspNetCore.SignalR.Client.HubConnectionBuilder().Build();
    
  4. Xamarin.Androidの場合、デバッグ構成でプロジェクトをビルドしてみます。 Xamarin.iOSの場合は、iPhoneシミュレーターのデバッグ構成でアプリをビルドして実行します。

Visual Studio 2017バージョン15.7の結果

Xamarin.AndroidアプリとXamarin.iOSアプリの両方がビルドされ、エラーなしで実行されます。

Visual Studio 2017バージョン15.8 Preview 4での結果

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を更新した後にこれらのエラーが表示されたのはなぜですか?

9

これらのエラーを解決するにはどうすればよいですか?

これらのエラーを解決するには、それを使用するすべてのプロジェクトでMicrosoft.AspNetCore.SignalR.Client.Core NuGetパッケージをバージョン1.0.1以降に更新します。例えば:

  1. Tools> NuGet Package Manager> Manage NuGet Packages for Solution> Updatesに移動します。

  2. 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以降で行われます。

5

VS Entreprise 2017バージョン15.9.1を使用しています

私が直面する問題を解決するには(参照を解決できません:System.BuffersSystem.Memoryによって参照されます。System.BuffersのNuGetパッケージまたはアセンブリ参照を追加するか、System.Memoryへの参照を削除してください。)、このコマンドでSystem.Buffersパッケージをインストールします。

Install-Package System.Buffers-バージョン4.5.0

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

1
A. Blaise