私のコンピューターには、.NET Framework 2.0 をインストールしてから、.NET Fratmeworkt 3.0 をインストールしました。しかし最近、あるプログラムから「イベント 1000、.NET ランタイム 2.0 エラー報告」という例外が発生しました。なぜこのプログラムは、新しいバージョンではなく .NET ランタイム 2.0 を使用しているのか疑問に思っています。特定のプログラムが使用している .NET ランタイムのバージョンを確認するにはどうすればよいですか? 変更することは可能ですか?
3 に答える
「.NET ランタイム」は、実際には「共通言語ランタイム」(CLR) を意味し、.NET Framework 2.0、3.0、および 3.5 のバージョン 2.0 です。.NET 4.0 でのみ、CLR バージョンも 4.0 にインクリメントされました (SO でのこのデュアル バージョン管理について多くの質問があり、混乱しています。概要については、この回答を参照してください)。したがって、あなたが見ているメッセージは混乱を招くかもしれませんが、それでも正しいのです。
.NET 4.0 をインストールしていない場合、マシンに存在するバージョンは .NET ランタイム 2.0 だけです。
アプリケーションが実際に .NET Framework 2.0 ではなく .NET Framework 3.0 (3.5) に対してコンパイル/ビルドされているかどうかを知りたい場合があります。
この情報を取得するには、アプリケーション アセンブリのメタ データ、つまり、.NET フレームワーク自体のアセンブリを含む他のアセンブリへの参照が保存されている場所と、それらの他のアセンブリのバージョンを確認する必要があります。
この情報を表示するには、Reflector を使用するかILDASM.EXE
、.NET Framework SDK (または Visual Studio) に付属しています。
たとえば、ILDASM.EXE
選択したバイナリ (実行可能ファイルまたは DLL) を使用して、「MANIFEST」ノードを開きます。次のようなエントリが表示されます。
.assembly extern System.Windows.Forms
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
この場合、これは .NET 4.0 アプリケーションから取られたものであり、 のみを参照してSystem.Windows.Forms.dll
いますが、全体像は理解できたと思います。
<supportedRuntime>
アプリケーションの構成ファイルで要素を指定することにより、アプリケーションが使用するランタイムのバージョンに (部分的に) 影響を与えることができます。これに関する詳細については、この Stack Overflow の質問などを参照してください。
それはすべて、問題のアプリケーションがコンパイルされた .NET のバージョンによって異なります。開発者はターゲット フレームワークを選択します。私の知る限り、エンド ユーザーは、デプロイ後に使用するライブラリのバージョンを変更できません。アプリケーションが 2.0 を対象としていた場合、4.0 がインストールされていても、常に 2.0 バージョンのライブラリで実行されます。
ランタイムがキーワードです。ランタイムには、1.0、1.1、2.0、および 4.0 の 4 つの異なるバージョンしかありません。CLR とジッタのバージョン 2.0.50727 をまだ使用しています。また、mscorlib.dll およびその他のコア .NET フレームワーク アセンブリはまだ 2.0.0.0 です。
.NET 3.0、WCF、WPF、Linq などをサポートする一連の新しいアセンブリ、および C# コンパイラの新しいバージョンをインストールすると、さらに多くの機能が追加されたことは間違いありません。ランタイムの新しいバージョンを必要としなかったとしても、バージョン番号の増加を保証するには十分です。
.NET の次のバージョンである 4.5 でも同じことが起こります。ランタイム バージョンは 4.0.30319 のままです。