web-dev-qa-db-ja.com

定義済みタイプ 'System.ValueTuple´2'は定義されていないかインポートされていません

Visual Studio 15 Preview 3をインストールし、新しいTuple機能を使用しようとしました

static void Main(string[] args)
{
    var x = DoSomething();
    Console.WriteLine(x.x);
}

static (int x, int y) DoSomething()
{
    return (1, 2);
}

コンパイルするとエラーになります。

定義済みタイプ 'System.ValueTuple´2'は定義されていないかインポートされていません

ブログ投稿 によると、この機能はデフォルトで "on"になっているはずです。

私は何をしましたか?

335
gsharp

.NET 4.6.2以下、.NET Core 1.x、および.NET Standard 1.xの場合は、NuGetパッケージSystem.ValueTupleをインストールする必要があります。

Install-Package "System.ValueTuple"

またはVS 2017でパッケージ参照を使用する:

<PackageReference Include="System.ValueTuple" Version="4.4.0" />

.NET Framework 4.7、.NET Core 2.0、および.NET Standard 2.0には、これらの種類があります。

466
Eli Arbel

.NET Framework 4.7 の一部です。

上記のフレームワーク以上(または.NET Core 2.0/.NET Standard 2.0)をターゲットにしていない限り、ValueTupleを参照する必要があります。これを行うには、System.ValueTupleNuGet Packageを追加します。

37
Nikita

ValueTuple型は、新しいフレームワークに組み込まれています。

  • .NET Framework 4.7
  • .NET Core 2.0
  • モノ5.0
  • .Net標準2.0

これらの新しいフレームワークバージョンのいずれかをターゲットにするまでは、ValueTupleパッケージを参照する必要があります。

詳細は http://blog.monstuff.com/archives/2017/03/valuetuple-availability.html

13
Julien Couvreur

Visual Studio Code に組み込まれている Terminal を使用して、次のコマンドを実行します。

dotnet add package "System.ValueTuple"

後でdotnet restoreを実行することを忘れないでください。

5

.NET 4.6.2 Developer Pack VSがインストールされていることを確認してから、NuGetからSystem.ValueTupleパッケージを取得します。

3
Poulad

他の人が同じ問題を抱えている場合、私はプロジェクトを4.7に更新した後にこのエラーに遭遇しました。奇妙なことに、このエラーをなくすにはSystem.ValueTuple参照を削除する必要がありました。

3
Javier Rosa

.NET Frameworkプロジェクトへのパッケージ参照としてValueTuplename__を追加することはお勧めしません。ご存知のように、このアセンブリは4.7 .NET Frameworkから入手できます。

プロジェクトがパッケージフォルダーの代わりに.NET FrameworkフォルダーからValueTuplename__を含めようとすると、一部のAssembly not foundエラーが発生する場合があります。

今日、会社でこの問題が発生しました。 2つのプロジェクトで解決策がありました(私はそれを単純化しすぎています):

  • Libname__
  • Webname__

Libname__にはValueTupleが含まれ、Webname__にはLibname__が使用されていました。何らかの未知の理由で、Webname__へのパスを解決しようとしたときにValueTuplename__がHintPathname__を.NET Frameworkディレクトリに持っていて、誤ったバージョンを使用していたことが判明しました。そのため、アプリケーションがクラッシュしていました。 ValueTuplename__は、そのアセンブリのWebname__の.csprojまたはHintPathname__で定義されていません。問題は非常に奇妙でした。通常、パッケージフォルダーからアセンブリをコピーします。今回は普通ではありませんでした。

私にとっては、System.*パッケージ参照を追加することは常にリスクです。彼らはしばしば時限爆弾のようなものです。彼らは最初は問題なく、最悪の瞬間にあなたの顔で爆発する可能性があります。私の経験則:本当に必要がない場合は、。NET FrameworkSystem.* Nugetパッケージを使用しないでください。

ValueTuplename__プロジェクト内の.csprojファイルにWebname__を手動で追加することで問題を解決しました。

1
Shoter

Framework 4.5.2を対象とした古いプロジェクトの1つで、同じ問題が発生していました。上記のすべてを含むいくつかのシナリオを試しました:ターゲット4.6.1、System.ValueTupleパッケージの追加、bin、obj、および.vsフォルダーの削除。サイコロなし。 4.7.2についても同じプロセスを繰り返します。 1人のコメンターが示唆したように4.7.2をターゲットにしていたため、System.ValueTupleパッケージを削除しようとしました。まだ何もありません。 csprojファイルの参照パスを確認しました。正しく見えます。 4.5.2に戻り、パッケージを再度インストールしました。これはすべて、いくつかのVSで再起動され、同じフォルダーが数回削除されます。文字通り何も機能しませんでした。

代わりに構造体を使用するためにリファクタリングする必要がありました。他の人が将来この問題に遭遇し続けないことを願っていますが、私たちが困惑したようになってしまうなら、これは役に立つかもしれないと思いました。

0
Candace Wrather

System.ValueTuple.dllファイルがソース管理下にあることを確認し、.cssprojファイルでその参照を修正する必要がありました。

  1. ソリューション内の各プロジェクトを右クリック
  2. プロジェクトをアンロードする
  3. .cssprojファイルを編集:変更

<Reference Include = "System.ValueTuple">

<ヒントパス>

....\ProjectName\ProjectName\obj\Release\Package\PackageTmp\bin\System.ValueTuple.dll

</ HintPath>

</参照>

<Reference Include = "System.ValueTuple">

<ヒントパス>

..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll

</ HintPath>

</参照>

  1. 変更を保存してプロジェクトをリロードする
  2. system.ValueTuple.dllを見つけてこのフォルダーに保存します
  3. このファイルの参照をソース管理に追加する

(オプション):7.他の.dllファイルと同じ問題をこのように解決する

0