Xamarinでクロスプラットフォームのコードを書いていてハマった点。
少々込み入った話ではあるけれど、Xamarinでクロスプラットフォームプロジェクトを使っていてメインで共有されるコードに使えないnamespaceが結構あります。
今回はまった点としては、
・project.ios、project.UWP、project.Androidのそれぞれの参照には、System.Http.Netが定義できるが、肝心なメインのprojectの参照には追加できない。
ターゲットの定義上で、.NET Standardが定義されているのが理由のように見える。
ターゲットの定義に問題がありそうだけれど、各プラットフォームのプロジェクトで参照できるのに、肝心な部分でHttpClientが使えないのはちょっと痛い。
アプリの提出を優先して、各プラットフォームに書いてしまうことはできるけれど。どうしたもんかな。
追記:いろいろなサイトを検索して調べていますが、Mac版Xamarin Studioとかで設定が可能らしい。この辺をきっちり公開してる人っているのかな。。。参考リンク
追記2(解決):XMLDocumentはPCLではサポートされていないようです。参考リンク 理由はWindows Phone 8でXMLDocumentがサポートされていないからのようです。ターゲットからWindows Phone 8を外せればよいのでしょうが、PCLではデフォルトWindows 8.1とPhoneが入れられるようです。(プロファイルのリストがMac版Xamarin Studioで設定できます)
個人的にはテスト用にWindows Mobile 10を持っているけれど、一番シェアの少ない(ほとんどユーザーのいない)Windows Phoneのせいで・・・
解決策としては、System.Xml.Linq.XDocumentを使えということですね。\o_o;/
追記3:プログラムをXDocumentベースで書き換えました。結局XMLDocumentよりも素直な書き方になった感じ。まぁプログラムも2回目書き直すときは最初よりも簡単にかけるもの。仮にNativeコードベースでクロスプラットフォームのプロジェクトを作る場合は、Xamarinのクラスライブラリプロジェクトを作って、参照(Refference)で呼ぶ必要がある。DLLにして一つのモジュールとしてコンパイルする。Shared Projectは、参照設定とNuGetのパッケージは使えないので。