Xamarinで利用できるNuGet PackageはNuGet Package Explorerで検索しよう

[Xamarin Advent Calendar 2016 その２](http://qiita.com/advent-calendar/2016/xamarin2)　17日の記事です。


Xamarin導入を会社で進めるにあたって、Nuget内に利用したいものがパッケージとして存在し利用できるのかを判断するのに苦労したのでその辺をまとめてみました。とはいえ確認する方法は１つで、簡単に「NuGet Package Explorer」で確認できるんでご活用ください。ただし、Windowsでのみ活用できる方法ですので、macOSの方多いと思いますが、ご了承ください。パッケージ検索で気になる点としては以下になります。

- .NET FrameworkでなくPCLとして利用できるか？
- PCLのProfileはあっているか？
- .NET Standard Libraryを利用できるか？
- .NET Standard Libraryのバージョンはいくつなのか？

PCL/.NET Standardについて知りたい方はすでにいろんな方が記載されていますがこのあたりを事前にご確認ください。

- [Xamarinと、ポータブル・クラス・ライブラリ（PCL）](http://www.buildinsider.net/mobile/insidexamarin/13)　// 榎本（@atsushieno）さん
- [Introducing .NET Standard](https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/) // MSDN Blog
- [.NET Platform Standard](https://docs.com/iwanaga-nobuyuk/2848/net-platform-standard) // (Docs) 岩永さん
- [.NET Standard Library](https://docs.microsoft.com/ja-jp/dotnet/articles/standard/library) // .NET Documentation

# 環境

- Windows10 Pro
- Visual Studio 2015（検索には必須ではありません。）

# Visual StudioからNugetパッケージをインストールする場合

　（通常）Nugetからパッケージをインストールするとき、Visual Studioから**「参照」⇒「NuGetパッケージの管理」**よりパッケージ追加をしていくかと思いますが、パッケージの説明に対象となるPCLの**profile**が記載されているのはわずかです。また、それが.NET 4.5等であったりPCLプロジェクトにすんなり取り込めないものも存在するため、利用できるものを判断するのには苦労すると思います。この段階でフィルタリング等かけれればいいのですが、機能として存在しないので地道に探すしか手段はありません。
　.NET Standard Libraryは依存関係を見ればこの時点でだいたい推測はついていきますが、PCLはそれすらできません。今後は.NET Standard Libraryに移行していくと思われますので、今回の手法はそれまでの繋ぎとはなりますが、現状多く利用されているものはまだPCLのままです。アップデートされてくるかもわかりません。
　[nuget](https://www.nuget.org/) のサイトから探したらいいのでは？と思われるかもしれませんがこちらからもPCLのprofileの記載は見当たりません。
　さらに、Windows(Visual Studio)の場合は、PCLプロジェクトが現在どのprofileかを簡単に確認することができません。
（macOSのXamarin Studioだとすぐわかります。）
という点から苦労すると思いますのでまずはそのおさらいからです。

## Windows(Visual Studio)でprofileを確認しよう
 Visual Studioのプロジェクトより「参照」⇒　「プロパティ」　⇒　「パス」
から参照先がどこになっているかで、現在のprofileを確認することができます。
　この場合は**Profile259**となります。

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.amazonaws.com/0/146351/3d57513c-176b-d269-b96a-bc651be83abc.png">

> 環境によっては、必ずしもprofileにあっているとは限りませんのであくまで参考としてください。


## macOSの場合

田淵さんの記事がありますので、こちらご覧ください。
[Visual Studio での PCL (Portable Class Library) の Profile について](http://ytabuchi.hatenablog.com/entry/2014/12/10/174116)

# （本題）NuGet Package Explorerとは？

[https://github.com/NuGetPackageExplorer/NuGetPackageExplorer](NuGetPackageExplorer)
こちらに公開されている通り、Windowsで利用できるGUIツールになります。
一般的にNuGet Packageを検索するだけならVisual Studio の**Nuget Package Manager**でよくない？と思われるかと思います。
そうなんですが、肝心の **profile** 情報を見ることができないので
この**「NuGetPackageExplorer」**が必要となるんです！

## 例）最近preview版として公開されている[Mobile Center](https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/11/18/visual-studio-mobile-center/)のSDKの場合
アセンブリ内から情報を表示しているようでその中に、**TargetFramework:.NETPortable,Version=v4.5,Profile=Profile111**の記載があるので、このライブラリは**Profile111**とうことがわかります。
合わせて、このNuGetPackageはXamarin.Android/Xamarin.iOSでも利用できることがわかり、.NET Frameworkとしての個別提供はない模様
ここまでの情報をVisual Studio のNuget Package Managerでは見ることができません。

<img width="600" alt="ファイル名2" src="https://qiita-image-store.s3.amazonaws.com/0/146351/5402b999-bcf8-a480-db33-c94997b3c22e.png">

> assembly情報を見ているということがわかるので、お気づきだと思いますが、ILSpyや.NET Reflectorでも見れるかと思いますが
正式な公式アプリでなく逆アセンブリということにもなりますので、自己責任でお願いします。


# まとめ
Xamarin.Android/Xamarin.iOS/PCL/.NET Standard Libraryプロジェクトで探しているパッケージがあれば、
まずは、以下の手順で確認してみることをお勧めします。

- **NuGetPackageExplorer**で検索かけてみて利用可能であるか確認する。
- Visual Studioで現在のプロジェクトに取り込み可能か確認する。
    - 取り込めない場合は、依存パッケージも同じように**NuGetPackageExplorer**で確認する。


> ほかにもいろいろ手段はあるのですが、有償だったりするので、お手軽にやるにはまずこれで慣れてからの方がいいのかな思ってます。