【Xamarin.Forms&Prism】ReactiveProperty導入直後のAndroidプロジェクトでビルドエラー


はじめに

Xamarin.Forms & Prosm.Autofac.FormsプロジェクトにReactivePropertyを追加してAndroidプロジェクトをビルドするとビルドエラーが出た。

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets(1898,2): error XA2002: Can not resolve reference: System.Threading.Tasks.Extensions, referenced by System.Reactive. Please add a NuGet package or assembly reference for System.Threading.Tasks.Extensions, or remove the reference to System.Reactive.

環境

  • macOS 10.14 Mojave
  • Visual Studio Community 2017 for MAC(7.7.4)
  • Prism.Autofac.Forms(7.1.0.431)
  • ReactiveProperty(5.3.2)

対策

既知の問題みたいです。

https://github.com/runceel/ReactiveProperty/issues/87
https://github.com/dotnet/reactive/issues/803

詳しくはわからないけど、「System.Threading.Tasks.Extensions.dllはバージョン4.4.0つかっとけ」ってことみたいなので、そのように設定していきます。

  1. Androidプロジェクトを右クリックし、[追加]-[NuGetパッケージの追加(P)...]をクリックして「パッケージを追加」画面を開きます。
  2. System.Threading.Tasks.Extensionsのバージョン4.4.0を追加します。
  3. Androidプロジェクトをビルドします。 警告は残りますが、とりあえずビルドできました。

おまけ

AndroidプロジェクトのcsprojファイルにSystem.Threading.Tasks.Extensions.dllバージョン4.4.0を参照するように設定する方法もあるみたいです。
https://github.com/dotnet/reactive/issues/803#issuecomment-455383106
Macの場合は以下のようにItemGroup要素をルート(Project)要素配下に追加します。

{ソリューション名}.Droid.csproj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  : 
 (略)
  :
  <!-- ここから -->
  <ItemGroup>
    <Reference Include="System.Threading.Tasks.Extensions">
      <HintPath>$(HOME)/.nuget/packages/system.threading.tasks.extensions/4.4.0/lib/netstandard2.0/System.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>
  </ItemGroup>
  <!-- ここまで -->
</Project>