取り急ぎ古いNuGetでもインストールできるパッケージをつくる
CoreTweet 0.7.0.339 を NuGet 2.x 系を使う環境(Visual Studio 2013 でアップデート入れてない or MonoDevelop/Xamarin Studio 6.0.x以下)でインストールしようとすると、こんな感じのエラーが出ることは知ってましたがリリースしてしまいました、が思ったより影響大きかった(エゴサ調べ)ので、なんとかしたお話。
原因
0.7.0.339 の nuspec ファイルの依存パッケージが記述されている部分がこちら。
<dependencies> <group targetFramework="net35"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="portable-win81+wpa81"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="portable-net45+dnxcore50+win8+wpa81+MonoAndroid+xamarinios+MonoTouch"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="monoandroid"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="monotouch"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="xamarinios"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="netstandard1.1"> <dependency id="Newtonsoft.Json" version="9.0.1" /> <dependency id="System.Dynamic.Runtime" version="4.0.11" /> <dependency id="System.Globalization" version="4.0.11" /> <dependency id="System.Linq" version="4.1.0" /> <dependency id="System.Linq.Expressions" version="4.1.0" /> <dependency id="System.Net.Http" version="4.1.0" /> <dependency id="System.Reflection.Extensions" version="4.0.1" /> <dependency id="System.Runtime.Extensions" version="4.1.0" /> <dependency id="System.Text.RegularExpressions" version="4.1.0" /> <dependency id="System.Threading" version="4.0.11" /> </group> <group targetFramework="netcoreapp1.0"> <dependency id="Newtonsoft.Json" version="9.0.1" /> <dependency id="System.Dynamic.Runtime" version="4.0.11" /> <dependency id="System.Globalization" version="4.0.11" /> <dependency id="System.IO.FileSystem" version="4.0.1" /> <dependency id="System.Linq" version="4.1.0" /> <dependency id="System.Linq.Expressions" version="4.1.0" /> <dependency id="System.Net.Http" version="4.1.0" /> <dependency id="System.Reflection.Extensions" version="4.0.1" /> <dependency id="System.Runtime.Extensions" version="4.1.0" /> <dependency id="System.Security.Cryptography.Algorithms" version="4.2.0" /> <dependency id="System.Text.RegularExpressions" version="4.1.0" /> <dependency id="System.Threading" version="4.0.11" /> </group> </dependencies>
この中で、 NuGet 2.x 系で対応していないフレームワークは netstandard1.1 と netcoreapp1.0 の2つです。さて、 NuGet 内部では対応していないフレームワークはまとめて「Unsupported 0.0」として扱われます。つまりこういう状況。
<dependencies> <group targetFramework="net35"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="portable-win81+wpa81"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="portable-net45+dnxcore50+win8+wpa81+MonoAndroid+xamarinios+MonoTouch"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="monoandroid"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="monotouch"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="xamarinios"> <dependency id="Newtonsoft.Json" version="9.0.1" /> </group> <group targetFramework="Unsupported,Version=0.0"> <dependency id="Newtonsoft.Json" version="9.0.1" /> <dependency id="System.Dynamic.Runtime" version="4.0.11" /> <dependency id="System.Globalization" version="4.0.11" /> <dependency id="System.Linq" version="4.1.0" /> <dependency id="System.Linq.Expressions" version="4.1.0" /> <dependency id="System.Net.Http" version="4.1.0" /> <dependency id="System.Reflection.Extensions" version="4.0.1" /> <dependency id="System.Runtime.Extensions" version="4.1.0" /> <dependency id="System.Text.RegularExpressions" version="4.1.0" /> <dependency id="System.Threading" version="4.0.11" /> <dependency id="Newtonsoft.Json" version="9.0.1" /> <dependency id="System.Dynamic.Runtime" version="4.0.11" /> <dependency id="System.Globalization" version="4.0.11" /> <dependency id="System.IO.FileSystem" version="4.0.1" /> <dependency id="System.Linq" version="4.1.0" /> <dependency id="System.Linq.Expressions" version="4.1.0" /> <dependency id="System.Net.Http" version="4.1.0" /> <dependency id="System.Reflection.Extensions" version="4.0.1" /> <dependency id="System.Runtime.Extensions" version="4.1.0" /> <dependency id="System.Security.Cryptography.Algorithms" version="4.2.0" /> <dependency id="System.Text.RegularExpressions" version="4.1.0" /> <dependency id="System.Threading" version="4.0.11" /> </group> </dependencies>
こうすると Unsupported で2個同じパッケージが含まれているので、検証で殺されて、スクリーンショットのエラーメッセージが出るようになるわけです。
この問題は、 netstandard, netcoreapp に対応した 2.11 で解決しています。
どう対処する?
A. 諦めるか、古い NuGet が非対応のフレームワークを1つまでにする
とりあえず CoreTweet 0.7.1.345 では依存パッケージの宣言から netcoreapp を消し去りました(消し去るために少しコードもいじりましたが)。
というわけで、なかなか厳しい状況なので、早く NuGet 3 系が広まって欲しい。 Xamarin Studio 6.1 はよ。