Xamarin Workbooks の NuGet で ~ has already dependancies ~ 関連で怒られた時の一つの解決策

  • 1
    いいね
  • 0
    コメント

2017年5月12日追記:
Alpha Preview ですが, Xamarin Workbooksのバージョンが1.3になり,
ローカルのNuGet.configを読むことになり,ローカルのリポジトリを読めるようになったほか,
ここで問題にあげているバージョンの競合に関する問題はNuGet 4 client libraryの導入により起こらなくなったと考えられます.

その為まだStableを使い続けている人向けにこの記事をおくります.
追記終了


わざわざ dotnet new -t console みたいな感じでアプリケーション作って試して,というのが面倒な時やちょっとしたことを試したい時,REPL の環境があると非常に開発速度が向上します(個人の感想).

C# で REPL となると,Visual Studio の C# Interactive を使えばいいですが,そのために Visual Studio を開くのも面倒ですし,そうであればdotnet repl とかは?となりますが,それは Windows でのお話...

Mac だと scriptcs とかが候補にあがってくれるのですが,Jupyter Notebook の kernels から入れた scriptcs ベースのものの印象があまり良くなく(前の話なので今は違うかもしれません),そうなると公式から出ている Xamarin Workbooks 一択と感じています.

発生事象

その Xamarin Workbooks ですが,最近自分の作ったライブラリを試してみようとしたところ以下のようなエラーが NuGet パッケージの追加の際に出てきました.

Xamarin Workbooks has already dependancies Newtonsoft.Json(以下略)

そうですか,はぁそうですか,と言いたいところなのですが,いや,知らんよそんなのというお気持ちが非常に高まります.

確かに私のライブラリは Newtonsoft.Json >= 10.0.2 に依存してますし,かぶってますね,とわかるのですが,いやいや...

調査,そして手がかりへ

もしかしたら has already dependancies で調べたら NuGet 周りのいい感じの対処法見つかるんじゃないかと思ってググったら出てきました.

NuGet: 'X' already has a dependency defined for 'Y'

まさにこれ.これですこれです.ということで読んでみると

NuGet のバージョンを上げろ

はーなるほど,そーゆーことね...ということで Xamarin Workbooks が使っている NuGet Package Manager を更新してしまえばいいのねということで更新してしまいます.

解決策

Mac での話ですが,その NuGet Package Manager の本体は
/Applications/Xamarin\ Workbooks.app/Contents/MonoBundle/NuGet.Core.dll です.
こいつを NuGet のリポジトリからダウンロードしてきた新しい NuGet.Core.dll で置き換えてあげれば万事解決です.

そうすると無事自分のライブラリを追加することが出来ました.やったーーーーー

諸注意

とまぁ今回はうまくいきましたが,Xamarin Workbooks 側はわけあって 9.0.1 に固定しているようです.

そのため,上記の手法を試す時は必ず もとの NuGet.Core.dll のバックアップをとってお試しください.

お気持ち

もうちょい Xamarin Workbooks の NuGet 周りが強くなると嬉しいなと思います(ローカルの NuGet リポジトリを指定できるとか...)