C#の言語仕様と、.NET Frameworkの後方互換性について。
C#の言語仕様と.NET Framework非依存の話
C#6あたり?から言語仕様の拡張は、コンパイラ(Rosyln)によってC#コードからMSILに変換する際に実現されるようになったおかげで、MSILの実行エンジンである.NET Frameworkのバージョンにほとんど依存しなくなっている。VS2017からIDE上でサポートされるC#7もしかり。
このおかげで、最近では古い.NET Frameworkを対象としたプロジェクトでも、最新のC#の言語仕様でコード書けるようになってるのだけど。
C#6以降から急に始めた人には、どうなっているのか分かりにくいだろうなぁと。
(このRoslynの力技感は半端なくて、後方互換性を保ちながら、ハイスピードで進化し続けているので、スマート&凄い天才的な実装方法なのだけど…、それゆえに分かりづらさも有るかなぁと)
まぁ、そんなことを思ってる。
.NET Frameworkの後方互換性の話
これと似ているといっていいのかわからないけど、.NET Frameworkの後方互換性も一般の人にはわかりにくくなっていて、
MSの技術に明るくない人だとかなり混乱しているのが見て取れる。
- .NET Framework 4.5と下位バージョンの互換性がカオス - ぼくんちのTV 別館
- この記事では、『.NET Framework4.5がインストールされていても、.NET 3.5で作成されたアプリはデフォルトで起動しないため、互換性がない』と書ききっている
- のだけど、これは誤り。
実際には、上記記事でも触れられているのだけど*1MSDNの注釈
既定では、アプリケーションは、開発された共通言語ランタイムのバージョンで動作するため、アプリケーションを .NET Framework 4.5 で実行するには構成ファイルを提供する必要がある場合があります。
にあるように、アプリケーション側に何の細工もされていない場合、.NET 3.5のアプリを動かすには.NET Framework3.5がインストールされている必要がある。
のだけど、これには例外があって、.NET 3.5のアプリケーションの構成ファイル(manifestファイル)に『v4.5での動作を許可する』旨を記載すると、.NET 4.5のフレームワークを用いて動かすことが可能になる。*2
※ ちなみに、上の説明では.NET 3.5を例に上げたけど、2.0/3.5/4.xの断絶しているフレームワーク間で有効な一般的な話。
C#/Windowsプログラマなら公知の事実だけど、正直これを一般の人に分かれというのはかなり厳しいものがある。