昔のサイトもそれほど読みにくくはありませんでしたが、色々と情報が増えてどこを見ればいいのかわからない感じだったのも事実です。なので、個人的にはかなり良くなったと思います。 全文検索もできますし。
たとえば、docs.nuget.org のトップページにある「Guides」には目的別のガイドラインがありますし、クイックスタート的な記事もあります。このあたりを見れば結構何とかなるはずですし、リファレンスもメニューからたどることができます。
さて、その公式ドキュメントを見ればマルチプラットフォーム対応のやり方もわかると思います。色々書いてありますが(
<file src>
とか初めて知った)、ようは以下のようにすれば OK です。.nupkg
ファイル生成のソースとなるディレクトリツリー内のlib
の下に、ターゲットプラットフォームを表す名前(TPM:Target Platform Moniker)のディレクトリを切り、そこに.dll
と、IntelliSense 用の XML ドキュメントコメントファイルを入れます(XML 入れなくてもかまいません)- 依存先のパッケージがある場合、
.nuspec
の/package/dependencies
要素の下に、TPM ごとに<group targetFramework="{TPM}">
要素を対象の TPM ごとに記述します。この子要素として、依存先のパッケージを<dependency id="{パッケージの名前}" version="{バージョン}" />
といった具合に書いていきます。 - .NET Standard 用の TPM を含む場合、サポートしていない古いバージョンの NuGet でよくわからないエラーが出ることがないように、
/package/metadata
要素にminClientVersion="2.12"
と記述します(これ、docs.nuget.org に書いてませんね……)
.nuspec
ファイルはこちらちょっと文字ばかりでわかりづらいでしょうか。実際に展開した
.nupkg
を tree /F
した結果はこんな感じです。C:.
│ MsgPack.Cli.nuspec
│ [Content_Types].xml
│
├─lib
│ ├─MonoAndroid10
│ │ MsgPack.dll
│ │ MsgPack.xml
│ │
│ ├─net35-client
│ │ MsgPack.dll
│ │ MsgPack.XML
│ │
│ ├─net45
│ │ MsgPack.dll
│ │ MsgPack.XML
│ │
│ ├─net46
│ │ MsgPack.dll
│ │ MsgPack.XML
│ │
│ ├─sl5
│ │ MsgPack.dll
│ │ MsgPack.XML
│ │
│ ├─windowsphone8
│ │ MsgPack.dll
│ │ MsgPack.XML
│ │
│ └─Xamarin.iOS10
│ MsgPack.dll
│ MsgPack.XML
│
├─package
│ └─services
│ └─metadata
│ └─core-properties
│ d502c190230a45328393d9c274cf792e.psmdcp
│
└─_rels
.rels
ターゲットモニカについては、公式ドキュメント を参照してください。 Xamarin についてはちょっとわかりづらいですが、上記の例の記述で動くはずです。なお、
monotouch
が旧形式の Xamarin iOS、Xamarin.iOS
が Unified app 版になります(Xamarin のドキュメント)。なお、旧形式については、Xamarin iOS の 10.0 からサポートされていません。さて、実際に作る際には、以下のようにするといいでしょう。
- 実際に対応している OSS パッケージのディレクトリ構造や
.nuspec
ファイルを参考にする。私は JSON.NET や CoreFX のパッケージを参考にしました。 - ローカルのディレクトリに配置して、動作を確認する。なお、v3 の場合、配置先のディレクトリを
nuget init
しておき、nuget add
でパッケージを追加する必要があります。また、前に試した時、ローカルディレクトリは Windows でしかうまく動作しませんでしたが、最近は変わったかもしれません。