web-dev-qa-db-ja.com

Visual Studio 2017およびC#7.0を使用してメソッドからタプルを返すことができません

1週間前にリリースされたVisual Studio 2017 Communityをインストールし、C#7の新機能の調査を開始しました。

そこで、2つの値を返す簡単なメソッドを作成しました。

public class Program
{
    public static void Main(string[] args)
    {
        (int sum, int count) a = ReturnTwoValues();
    }

    static (int sum, int count) ReturnTwoValues() => (1, 1);
}

コンパイラはエラーを生成しています:

エラーCS8137コンパイラに必要なタイプ 'System.Runtime.CompilerServices.TupleElementNamesAttribute'が見つからないため、タプルを利用するクラスまたはメンバーを定義できません。参照がありませんか?

この名前のフレームワークで参照を見つけようとしましたが、運がありません!

C#7.0の機能を使用するために追加のものが必要な場合、すべてのプロジェクトでこれを行う必要があるのは非常に奇妙です?!

84
Zein Makki

このページを Roslyn で実行したところ、これを機能させるための次の手順が説明されています。

  1. C#プロジェクトを開始する
  2. NuGetからSystem.ValueTupleパッケージへの参照を追加します(プレリリース)

enter image description here

これらの手順に従って、現在動作しています。しかし、開始するすべてのプロジェクトでこれを行う必要があるのは本当に奇妙です!公式リリースに達したときにこれが修正されることを願っています!

124
Zein Makki

.Net 4.7 Frameworkをインストールした後にこのエラーが発生し始め、プロジェクトを.Net 4.7をターゲットに変更しました。

ValueTupleが.Net 4.7に含まれるようになったため、ValueTupleを手動で参照する必要はありません。

コンパイルエラーを修正するために必要なことは、プロジェクトの参照からSystem.ValueTupleへの参照を削除することだけでした。

42
aaaa bbbb