CLR (共通言語ランタイム) のバージョンは 4.0.30319.18034 です。.NET 4.5 は .NET 4.0 アセンブリのインプレース アップグレードであるため、4.0.30319 で始まります。
4.5 アップデートは .NET 4.0 ランタイムを完全に置き換え、実際のバージョン番号は v4.0.30319 に設定されたままにします。
(ソース 1、ソース 2 )
ただし、バージョン番号は、ユーザー Danielがこのリストから推測できるように、おそらくいくつかの更新を含む .NET 4.5 を表しています。
以下は、私が見たランタイム バージョンの例です。
- 4.0.30319.1 = .NET 4.0 RTM
- 4.0.30319.269 = ユーザーから収集したデータで確認されている最も一般的な .NET 4.0 バージョン
- 4.0.30319.544 = ユーザーのごく一部がインストールした別の .NET 4.0 バージョン
- 4.0.30319.17626 = .NET 4.5 RC
- 4.0.30319.17929 = .NET 4.5 RTM
- 4.0.30319.18010 = Windows 8 マシンの現在のバージョン
メジャー、マイナー、およびビルドのバージョン番号は変更されていないため、.NET 4.0 と 4.5 の違いがほとんどの人にとって問題になるほど大きいとは考えていなかったと思います。バージョン 4.0.30319 を期待する .NET 4.0 用のアプリケーションは、.NET 4.5 でも期待どおりに動作します。
.NET 4.0 または 4.5 のどちらをコーディングする場合でも、まったく同じ .NET アセンブリに対してコンパイルしています。唯一の違いは、 .NET 4.0 に対してコンパイルすると、.NET 4.5 からのいくつかの新しいクラスが非表示になることです (存在しないかのように)。したがって、.NET 4.0 と 4.5 の違いを見分ける唯一の信頼できる方法は、Christian.Kが彼の投稿で提案した、バージョン番号を含まないかなりハックなアプローチのようです。
このReflectionContext
クラスは、.NET フレームワーク 4.5 ではまったく新しいようで、便利に .NET に住んでいmscorlib
ます。だから、あなたはこのようなことをすることができます。
public static bool IsNet45OrNewer()
{
// Class "ReflectionContext" exists from .NET 4.5 onwards.
return Type.GetType("System.Reflection.ReflectionContext", false) != null;
}