◆ 依存パッケージアップデートしたら LINQ でエラーでるようになった
  ◆ ValueType のエラーでてるけど System.Collections.Immutable のアップデートで起きるみたい
◆ netstandard を参照に追加したらエラーはなくなった

去年頃に Microsoft.CodeAnalysis.CSharp.Scripting をつかったときに 依存パッケージをアップデートしてしまって動かなくなったことがあります
バージョンが違うと動きも違うので依存してるものを更新すると動かなくなるのは仕方ないことです

今回またやってしまったのですが 今回は普通に動いてました
気になったのでちょっと調べてみました

メモによると前回の更新は

System.ValueTuple                              4.3.0 --> 4.4.0
System.Text.Encoding.CodePages 4.3.0 --> 4.4.0
System.Security.Cryptography.X509Certificates 4.3.0 --> 4.3.1
System.Reflection.Metadata 1.4.2 --> 1.5.0
System.Collections.Immutable 1.3.1 --> 1.4.0

今回更新したのはこれでした

Microsoft.CodeAnalysis.Analyzers              1.1.0 -> 2.6.0
System.Collections.Immutable 1.3.1 -> 1.4.0
System.Reflection.Metadata 1.4.2 -> 1.5.0
System.Security.Cryptography.Algorithms 4.3.0 -> 4.3.1
System.Security.Cryptography.X509Certificates 4.3.0 -> 4.3.2
System.Text.Encoding.CodePages 4.3.0 -> 4.4.0
System.ValueTuple 4.3.0 -> 4.4.0
System.Xml.ReaderWriter 4.3.0 -> 4.3.1

バージョンが上がったのは X509Certificates ですが認証関係みたいですし エラーになる原因じゃなさそうです
Analyzers と Algrithms と ReaderWriter が増えてるのですが スクリプト実行するときでもないと関係なさそうです
前回あったエラーはたしかスクリプトを実行してなくてもビルドできなかったはずです

ありうるのは Reflection に関係してる Metadata や型関係の ValueTuple と Immutable くらいです
結局よくわからないしまあいいか と思って気にせずそのプロジェクトでコード書いていたら発現しました

LINQ でエラー

LINQ の Aggregate を使ったところがエラーになりました
頻繁に使わないし 書き方間違えてたかな と思って確認してるとこれだけでもエラーになりました

var nums = new List<int> { 1, 2 };
var total = nums.Aggregate((a, b) =>
{
return a + b;
});

これですら間違ってるのかなと 適当な Aggregate のサンプルを持ってきて貼り付けてみてもエラーでした
ついでに Select を試してみるとこっちもエラーです

新規プロジェクトだと問題なくビルドできたので このプロジェクト固有の問題みたいです
エラーは

C# The type 'ValueType' is defined in an assembly that is not referenced. You must add a reference to assembly.


となっていて ValueType が原因みたいです
そういえばさっきアップデートしたのに ValueType があったと気づきました

ただ Microsoft.CodeAnalysis.CSharp.Scripting を再インストールしてその後でパッケージをアップデートして 参照の追加が原因か調べてると

System.Collections.Immutable 1.3.1 -> 1.4.0

のアップデートをするとエラーになりました
あれ ValueType は?


前はできなかった気がするのですけど エラーの修正内容の表示に netstandard というアセンブリを参照に追加 というのが出てきました
とりあえず netstarndard を追加してみたらエラーは消えました
前回がたぶん VisualStudio2015 だったからでしょうか
それとも 最近 .NET Core をインストールしたとか関係あったりする?

.NET Standard と関係ありそうな名前ですが .NET Standard って .NET Framework や .NET Core みたいな実装と違って .NET 系を名乗るのにで最低限必要な部分を示した規格みたいなものを指すのじゃないのでしたっけ?
JavaScript の ECMAScript 的な

参照追加で解決はできましたが 追加したパッケージを使ってなさそうなコードがエラーになるのもおかしな気がしますし 変なアップデートしないほうがいいのかもしれませんね