設定 - C#コンパイラのバージョンと言語のバージョンの違い




vs2015 c# version (3)

Visual Studioに使用する言語バージョンを指定するには、/ langversionというコンパイラオプションがあります。
あなたはそれについてもっとhere見つけることができます。
here述べたように、プログラムでも設定できhere
コンパイラは異なるバージョンの言語でコンパイルすることができます。言語バージョンはフレームワークのバージョンに直接関係しませんが、言語機能を使用するには、動作可能な最小フレームワークがあります。
ほんの数分前、私はVS 2015でC#6.0の文字列補間を使用するdllをコンパイルしました

var version = 4;
var output = $"{version}";

フレームワーク4.0をターゲットとしています。 コンパイルして正常に動作します。 この記事では、バージョンのエンタングルメントについて説明していますが、古いバージョンのC#についてのみ説明しています。

FrameworkバージョンとC#バージョンは同じものだと思っていましたので、次回のFrameworkバージョンをコンピュータにインストールすると、それを使用する必要があります。

次に、フレームワークがC#バージョンに直接リンクされていないことがわかりました。同じマシン上に複数のC#コンパイラが共存できるため、おそらくコンパイラとC#のバージョンは同じでなければなりません。

今私は、コンパイラのバージョンとC#のバージョンが同じではないことを理解しています...

Visual Studioのコマンドプロンプト( 2010 ): C:\>csc

Microsoft(R)Visual C# コンパイラバージョン4 .030319.33440
Microsoft(R).NET Framework 4.5用

開発者向けコマンドプロンプト(VS 2013)C:\>csc

Microsoft(R)Visual C# コンパイラバージョン12 .030110.0
C#5用

私たちはそれを見ることができます
- VS 2010はC#4用のコンパイラバージョン4.0を使用しています(明示的に言及していないので、私はそれを推測できます)。
- VS 2013はC#5用のコンパイラバージョン12.0を使用します(これは明示的に言及されています)

異なる言語バージョンを使用してコンパイルすることが 、ユーザーに異なる結果をもたらす可能性があることがわかっている

質問

  • どのようにC#のバージョン (コンパイラ1ではなく、言語1)が私の具体的なプロジェクトを構築するためにVSを使用するかを調べるには?

  • C# コンパイラ言語バージョンの間に厳密で明確で透過的なリンクがありますか?

  • 私は具体的なソリューションのために別のコンパイラのバージョンを使用するVisual Studio(あるStudioのバージョンから別のバージョンへの移行の問題の場合)に示すことはできますか?


これまでVisual Studio 2005はこのバージョンで提供されていた.NetバージョンとC#コンパイラだけに修正されていました。 VSの新しいバージョンを使用する場合は、Visual Studioも切り替える必要があります。 Visual Studioでは、複数の.Netバージョンをターゲットにすることができ、新しいC#コンパイラと古い.Netフレームワーク(lambdaまたは.Net 2.0の拡張メソッド)を混在させることもできます。 単純にC#コンパイラバージョンはC#言語バージョンに関連しています。

コンパイラのバージョンをプロジェクトファイル(xmlとして開く)で確認することができ、Project要素のToolsVersion属性があります。

私の特定のプロジェクトではToolsVersion = "4.0" 、ターゲットプロジェクトは.Net 2.0です。 つまり、VS2005では不可能だった古いフレームワークで新しい言語構成を使用できるということです。


誰も十分な答えを得られないので、私は今試してみるでしょう。

最初に、C#はMicrosoftが現在発行しているバージョン履歴を持っています(明らかにMVPの投稿から来ています)。

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history

新しいリリースごとにどのような新機能が追加されたのかを簡単に確認できます。

次に、最初は.NET Frameworkの一部であったコンパイラリリースについて説明します。

私はいくつかのマイルストーンをリストアップしています(100%正確ではないかもしれないし、いくつかのバージョンはスキップされるかもしれません)。

  • .NET Framework 1.0用のcsc.exe 1.0(?)(C#1.0を実装しています)。
  • csc.exe 2.0( Microsoft(R)Visual C#2005コンパイラバージョン8.00.50727.8745 ).NET Framework 2.0(互換性のために1.0と同様にC#2.0を実装しています)。
  • csc.exe 3.5( Microsoft(R)Visual C#2008コンパイラのバージョン3.5.30729.8763 ).NET Framework 3.5(C#3.0およびそれ以前のバージョンを実装しています)。
  • csc.exe 4.0(?)for .NET Framework 4.0(C#4.0以降を実装しています)
  • csc.exe 4.x( Microsoft(R)Visual C#コンパイラのバージョン4.7.2053.0など )、.NET Framework 4.5以上(C#5.0以降を実装) バージョン番号は、マシン上の.NET Framework(4.5.0から4.7.1)に基づいて(4.xから12.xに)大きく異なる点に注意してください。

その後、Microsoftは古いcsc.exe廃止しました(ネイティブ実行可能ファイル)ので、代わりにRoslynベースのコンパイラを出荷しました(まだcsc.exe )。 その間、C#コンパイラはもはや.NET Frameworkの一部ではなく、VSの一部です。

C#コンパイラ、言語バージョン、.NET Frameworkが完全に分離されているので、マルチターゲティングを簡単に使用することができます。

  • Roslyn csc.exe 1.x(?)は、C#6.0以前のcsc.exe実装しています。 VS2015に同梱されています。
  • Roslyn csc.exe 2.x( Microsoft(R)Visual C#コンパイラのバージョン2.4.0.62122(ab56a4a6)など )は、C#7.x以前のバージョンを実装しています。 VS2017に同梱されています。

OK、十分なバックグラウンド。 あなたの質問に戻る。

Q1:どのようにC#のバージョン(コンパイラ1ではなく、言語1)が私の具体的なプロジェクトを構築するためにVSを使用するかを調べるには?

回答:プロジェクト設定から、どの言語バージョンが使用されているかを簡単に確認できます。

明示的なバージョンを選択しないと、プロジェクトをコンパイルするcsc.exeサポートされている最新バージョンが自動的に使用されます。

@Servyは、@ DaniloCataldoのlangversionスイッチの詳細についてのコメントの下にコメントしています。 そのスイッチには設計目標と限界があります。 たとえば、Roslyn 2.xコンパイラにC#4.0に基づいてプロジェクトをコンパイルしても、コンパイル結果はC#4.0コンパイラとは異なります。

Q2:C#コンパイラと言語バージョンの間には、厳密で明確で透過的なリンクがありますか?

回答:上記の背景を参照してください、私はすでにこの部分に答えたと思います。 厳密で明確で透明なリンクがあります。

Q3:具体的なソリューションに異なるバージョンのコンパイラを使用するようにVisual Studioに指定することはできますか(Studioのバージョン間での移行の問題がある場合)

回答:Q1に複製してください。







visual-studio-2013