web-dev-qa-db-ja.com

C#7.0は.NET 4.5で動作しますか?

Visual Studio 2017 RCでプロジェクトを作成して、.NET Framework 4.5プロジェクトで新しいC#7.0言語機能を使用できるかどうかを確認しました。 System.ValueTuple NuGetを参照した後、新しいタプルは正常に機能しているように思えます。他に考えるべきことはありますか?

System.ValueTuple NuGetの依存関係を確認したところ、.NET Framework 4.0はサポートされていないようです。これは事実ですか、それともこのランタイムでも新しい言語を動作させる方法はありますか?

60

C#7.0の新機能 を見ていきましょう。

  • タプル: System.ValueTupleパッケージ には、portable-net40+sl4+win8+wp8プロファイルのバージョンがあります。つまり、.Net 4.0で使用できます。 (依存関係に.Net 4.5のみがリストされている理由がわかりません。)

    .Netのさらに低いバージョンでもタプルを使用したい場合、プロジェクトに ValueTupleおよび関連するタイプのコード を追加する限り、タプルを使用できます。

  • out変数、パターンマッチング、ローカル関数、より多くの式のメンバー、throw式、数値リテラル構文の改善:これらの機能はすべて構文シュガーであるため、フレームワークの新しい機能は必要ありません。

  • refローカルおよび戻り値:この機能は、C#でフレームワークが開始以来サポートしていたものを公開するため、ここでもフレームワークの変更は必要ありません。

  • 一般化された非同期戻り型:この機能を使用するには、 System.Threading.Tasks.ExtensionsパッケージValueTask<T>の1つのタイプとともに)にあるAsyncMethodBuilder属性を持つタイプが必要です。このパッケージは.Net 4.5でのみサポートされているため、.Net 4.0の場合、 関連するタイプ 自分でコンパイルする必要があります。 (.NET 4.0でawaitonを使用するにはMicrosoft.Bcl.Asyncも必要ですが、それは新しいことではありません。)

要約すると、必要なパッケージをインストールした後、C#7.0はすべて.Net 4.5で動作し、そのほとんどは.Net 4.0でも動作するはずです。

87
svick

現時点では、C#7でコンパイルされたアプリケーションを.NET 4.5で実行しても問題ありませんが、C#7.0コンパイラには.NET 4.6が必要であるため、ASP.NET Dynamic Compilationを使用するASP.NETアプリケーションを。走る。

ソース: https://github.com/dotnet/roslyn/issues/17908

C#7.0コンパイラ(2.0以降)を実行するには.NET 4.6が必要です

https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (.NET 4.5のサポートについて)の情報は古いようです。

22