Visual Studio 2015で.Net Standard2.0を要求するnugetパッケージを利用する

VS2015を投げ捨てろって?ごもっともです。しかし、やりたくてもできないこともあるのです・・・

主にReactivePropertyの事ですが、nugetのライブラリの中には.Net Standardのバージョンを要求しているものが増えてきました。
しかし、無視して何も考えずにnugetからパッケージをインストールしてみても何も言われずにインストールできます。が、いざコードを書いてみるとアセンブリ参照がないとか言うエラーが出てくるでしょう。

エラー	CS0012	型 'IObservable<>' は、参照されていないアセンブリに定義されています。アセンブリ 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' に参照を追加する必要があります。

こんなの。
どうやら.Net Standardのなにかしらのdllが見つからない様子。.Net Standardなのか、NetStandard.Libraryなのかはとりあえず置いておきましょう(正直意味わからない)
これを解決するには、VS2015のnugetを更新します。こちら
NuGet Gallery | Downloads
から VS 2015 VSIX v3.6.0 というのをインストールしてやります。
インストール後、パッケージマネージャコンソールからUpdate-Package -Reinstallコマンドを実行して、すべてのパッケージを再インストールします(個別にやってもいいです)。
これで解決すると思います。

※18/07/26追記
もしこれでも解決しない場合は、こちら
.NET Downloads for Linux, macOS, and Windows
から.NetFramework 4.7.1以降の開発パッケージをインストール後、プロジェクトのターゲットを4.7.1以降に設定し、nugetパッケージの再インストールをすれば上手くいくはず、これでダメならもう・・・。


.Net Standardの中の人によれば
.NET Framework 4.7.1 provides built-in support for .NET Standard 2.0 · Issue #514 · dotnet/standard · GitHub
. NET Framework 4.6.1は.Net Standard 2.0に対応しているが.Net Standard 2.0の定めるAPIのすべてを実装してるわけではない。そのため、.Net Standard 2.0を要求するアプリケーションのビルドには追加のファイルが必要。
しかし、nuget 3.60未満のバージョンはそれに対応していないため、そのままでは.Net Standard 2.0要求のパッケージを利用できない。らしい。
じゃあパッケージインストール時にエラーにでも何でもしてくれればいいのにと思いますが、nugetの依存関係周りは相当複雑なので難しいのでしょう・・・
ちなみに、正確には.Net Standard 2.0対応のための追加ファイルを出力ディレクトリにコピーする処理のためのパッケージをインストールする必要があるらしく、nuget 3.60未満はそれに対応していないとのこと。そして、. NET Framework 4.7.1以降はそもそもその追加ファイルが. NET Framework側に入っているため(.Net Standard 2.0のAPIが全て実装されているという事でしょう)この処理は不要。
しかし、. NET Framework 4.7.1以降をインストールしてターゲットとするだけでは、どのみち.Net Standard 2.0を要求する依存関係の解消を自動で行ってくれないので、nugetのアップデートは必須でしょう。
また、出力ディレクトリに余計なファイルを含めたくないのであれば. NET Framework 4.7.1以降をターゲットとするといいかもしれません。