PCLプロジェクトからHTTPの呼び出しを行う場合、async/awaitをサポートしたHttpClientを利用したいですよね。
HttpClientを利用する場合、二つの利用方法があるみたいです。
本エントリーではそれぞれの利用方法と、選択のポイントをまとめましたので、良かったら参考にしてください。
方法は二つあります。
PCL内に含まれているものを利用する方法
つまるところ、標準のライブラリ内の物を利用する方法です。
対象のPCLプロジェクトを「Windows Phone Silverlight 8」で利用する予定がないのであれば、こちらの方法を選択すべきです。
「Windows Phone Silverlight 8」には含まれていないため、この方法は利用できません。
「Windows Phone Silverlight 8」は基本的に後方互換のためのものなので、特別な理由がない限り必要ないはずです。
Windows Phone 8.1も対象にされたい場合、いまから新規開発するのであれば「Windows Phone 8.1」を利用すれば済むケースが多いでしょう。
さて、現在のXamarinの最新版を利用している場合、デフォルトで「Windows Phone Silverlight 8」のサポートは除外された形でPCLプロジェクトが作成されます。
しかし、最新のAlphaチャネルで作ったものや、少し前に作成されたPCLプロジェクトは「Windows Phone Silverlight 8」が対象に入っている可能性があります。
PCLのサポート対象を変更する場合、プロジェクトのプロパティから変更します。
ただし、NuGetパッケージが登録されていると変更できませんので、いったんNuGetの登録を削除してからサポート対象を変更し、再度NuGetから必要なパッケージを割り当ててください。
以下の方法は問題がある可能性があるとの指摘を、@ytabuchiさんからいただいたの修正しました。
その場合、.csprojを直接修正するのが最も簡単です。
.csprojをまずはメモ帳などで開いてください。
すると以下のような記述があります。
<TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
ここのProfileを259から7か111に変更します。
Windows Phone 8.1を切り捨てられるのであれば7を、そうでないなら111に修正してください。
NuGetから「Microsoft HTTP Client Libraries」を入れて利用する方法
「Windows Phone Silverlight 8」が必要な場合だけ、こちらを利用します。
というのは、この方法だと、現時点でエラー一覧から警告を無くすことが私にはどうしてもできませんでした。
一応動きはするのですが、エラーが出ている以上、どういった不具合があるかわからないので、ちょっと怖いですよね。
エラー的には動作上問題になることはないと思うのですが。。。
なので、「Windows Phone Silverlight 8」が必要な場合だけ、こちらを利用することをお勧めしたいと思います。
以上です。 それではまた!