WindowsアプリケーションやSDK開発を行っている際にはVisual Studioを使っているプロジェクトが多いと思いますが、その際に、
とか、
とか「?」となるような会話を聞くことがあります。結構長くWindows開発をやってきた人でも意外にこの辺を深く考えずに、プロジェクトでは.NETバージョンやVSバージョンが固定されているからそれでいいやという感じで把握してないことがままあるようです。
IDEと共通言語ライブラリ、言語仕様の関係についてある程度理解していないと2018年1月現在ではVS2017まで提供されているのにも関わらず、提供exeの.NETバージョンが低いので新しいVSが利用出来ないとか、複数のVSバージョンを入れて使い続けるということになりかねません(もちろん別要因でどうしてもそういう場合が出てくることはあると思いますが...)。
それでは各バージョン間の関係をみていきます。
スポンサーリンク
目次
Visual StudioとC#の関係
C#の対応する言語バージョンはVisual Studioの以下のバージョンによって決定します:
Visual Studioバージョン | C#バージョン |
Visual Studio 2013 | 5.0 |
Visual Studio 2015 | 6.0 |
Visual Studio 2017 | 7.0 |
Visual Studio 2017 15.3 | 7.1 |
Visual Studio 2017 15.5 | 7.2 |
C#のバージョンをもし指定したい場合は[プロジェクト設定] - [ビルド] - [詳細設定]
より言語バージョンを指定することで出来ます:
また、Visual Studioの言語バージョンはなにも設定していないとdefault
となっており、メジャーバージョンの最新、つまり、Visual Studio 2017だとC# 7.0が使用されます。C# 7.1、C# 7.2に関してはマイナーバージョンなので使用したい場合は言語バージョンをlatest
か若しくはバージョン指定を行う必要があります。
Visual Studioと.NET Frameworkの関係
Visual Stuioのバージョンによって対応出来る.NET Frameworkの最大バージョンが決まります。Visual Studioに同梱されていて同時にインストールされます。
Visual Studioバージョン | .NET Frameworkバージョン |
Visual Studio 2013 | 4.5 |
Visual Studio 2015 | 4.6 |
Visual Studio 2017 | 4.7 |
同梱されている.NET Frameworkよりも古いバージョンをターゲットバージョンしたい場合は[プロジェクト設定] - [アプリケーション] - [ターゲット フレームワーク]
より変更出来ます:
また、ターゲットバージョンは別途SDKをダウンロードしてインストールする必要があります。
.NET FrameworkとC#の関係
.NET FrameworkとC#は基本的に独立します。C#はコンパイルすると共通中間言語(CIL)が生成され共通言語ランタイム(CLR)上で実行できます。.NET Frameworkのターゲットバージョンを決めるというのはどのCLRバージョン互換でC#をコンパイルするということであってC#がどのバージョンかを意識する必要は「ほぼ」ありません。
「ほぼ」といったのは、dynamic型やasync/await等の言語仕様は、動的型付けやスレッドプール機能が.NET Framework自体に備わってないと当然動きません。これについてはC#の言語バージョンと.NET Frameworkバージョン - C# によるプログラミング入門 | ++C++; // 未確認飛行 Cに詳しい記事があるので参考にするといいでしょう。結構バックポートもある様です。
うまく最新に移行していきたいVisual Studio
自分はVisual Studio 2013辺りから本格的にC#での開発をしていますが、新しいバージョンが出た場合に、まだ古いVSを利用している人がいる場合でもコンパイル可能な様に下位互換のみ気を付けて実装すれば特に困ったことになった経験はありません。新しいIDEの恩恵を受けて生産性を上げる為にもスムーズに最新版に移行出来るように進められればと思います。