NuGet で他のライブラリーに依存した型プロバイダーを配布するときの設定


NuGet で型プロバイダーを含むライブラリーを配布する際には注意が必要です。

型プロバイダーを含むアセンブリーを TP, TP が依存するライブラリーを DL として DL は NuGet で配布されているとします。通常の NuGet の配布であれば dependency を指定して TP のパッケージには DL を含まないようにしてやれば良いです。しかし型プロバイダーのケースでは, TP が依存する DL が同じフォルダーに入っていないとコンパイル時処理がうまくいきません。これを回避するために TP と一緒に DL もパッケージしてやる必要があります。これでまず依存性の問題は解決できまあす。

依存性の問題が解決すると,新たな問題が発生します。 TP と一緒に DL を配布することにより, DL のバージョンが固定されてしまうことです。 TP に含まれる DL' と NuGet から取得する DL では, DL' の方が優先されてしまうため, TP パッケージは DL の将来の更新にユーザー側で追従できません[A]。オリジナルの DL のアップデートを NuGet 利用者に反映させるためには, DL' がビルド時に利用されないようにしなければなりません。そのためには, TP パッケージで reference 要素を指定する際に TP 独自のアセンブリーのみを指定して, DL のアセンブリーを指定しないようにしなければなりません。 reference 要素を省略してしまうと, DL' が DL より優先してしまう模様です。

脚注

  1. ただし,依存ライブラリーのアップデートが原因でうまく動かなくなる可能性があるので,その点に関しては注意が必要です。 []