web-dev-qa-db-ja.com

.NET 4.7へのアップグレード後、「事前定義されたタイプSystem.ValueTupleは定義またはインポートされません」

既存のソリューションを.NET 4.6.2から.NET 4.7にアップグレードしています。このソリューションは、.NET 4.6.2を対象とするいくつかのnugetパッケージに依存しているため、nuget System.ValueTuple パッケージに依存しています。

しかし、アップグレード後、これらのビルドエラーが大量に発生します。

Error CS8179 Predefined type 'System.ValueTuple`2' is not defined or imported

コメント here で示唆されているように、System.ValueTupleパッケージを削除することはできません。他のパッケージが依存しているためです。 (そして私がそれを強制すると、彼らは爆破するように見えます。)

助言がありますか?

更新8/8/17

私はcanSystem.ValueTupleパッケージを削除することがわかったので、そのようにコンパイルするソリューションを取得できます。ただし、.NET 4.6.2をターゲットにしているように見えるソリューションには多数のNuGetパッケージがあり、したがって、依存関係としてSystem.ValueTupleが必要です。それらをインストールしてからSystem.ValueTupleパッケージを強制的に削除できますが、それらのパッケージのいずれかに更新がある場合、更新をインストールすると、System.ValueTupleパッケージが再度インストールされ、システムの構築が停止しますもう一度パッケージを削除するまで。

言い換えれば、私はそれをすべて機能させることができます-しかしそれは厄介で厄介なようです。これにアプローチするより良い方法はありますか?

21
Ken Smith

はい、 System.ValueTuple 4.4. にアップグレードします。

その理由は次のとおりです。

NuGetパッケージSystem.ValueTupleは、C#タプル構文に必要なValueTuple型を提供します。 .NET Framework 4.7では、mscorlibに型を直接追加しました。 NuGetパッケージと.NET Framework 4.7の両方を使用すると、同じタイプが複数回表示されることになります。これにより、Stack Overflowで報告されるこのような問題が発生します。

NuGetパッケージを更新して、.NET Framework 4.7のTuple型をmscorlibに型転送するようにしました。これにより、型が統一されるため、.NET Framework 4.7をターゲットにしながら、System.ValueTupleに依存する他のライブラリとNuGetパッケージを使用できます。

リリースノート を参照してください。

26
Immo Landwerth

Visual Studionでは、NuGetパッケージSystem.ValueTupleはValueTuple型を提供します。 System.ValueTupleを最新バージョンv4.4.0に更新します。手段System.ValueTupleを現在または以前のバージョンよりも高いバージョンにアップグレードします。