3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)ビルドされた時と実行時のFramework CLRのバージョンを知りたい

最近知ったんですが、例えば .Net Framework1.0 でアプリケーションを作成して、実行環境に .Net Framework2.0 しか入ってない場合、アプリケーションは2.0上のCLR(Common Language Runtime)で動こうとします。(基本的には、ビルドされた時と同じバージョンのCLRで動こうとします。)

ということで、ビルド時と実行時のCLRのバージョンを取得するアプリケーションをつくって試してみました。

まずビルド時のCLRのバージョンは下記のように取得できます。(C#)

//ビルドCLRバージョン取得(.NetFramework1.0では使用不可)

string clrVerBuild = System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion;

label1.Text = "ビルドCLR ver:" + clrVerBuild;

実行時のCLRのバージョンは下記のように取得できます。

//実行CLRバージョン取得

string clrVerRuntime = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();

label2.Text = "実行CLR ver:" + clrVerRuntime;

 

//下記のようにしても取得できる(リビジョン番号も取得できるのでSP適用有無がわかる)

clrVerRuntime = System.Environment.Version.ToString();

余談ですが、.NetFrameworkの混在した環境でアプリケーションを動かすと、使用するCLRのバージョンは下記のようになります。

(もしかしたら間違いがあるかもしれませんが。。。また、.Net3.0/3.5部分はCLR2.0だけの機能を利用した場合です)

CRLは現在、1.0 , 1.1 , 2.0 , 4.0 の4種類有ります。(.Net3.5 , 3.0 は .Net2.0 の拡張なので CLR は2.0になります)

.Net4 は下位互換性が全く無いようです。

.Netのサイドバイサイドを使えばアプリケーションが利用するCLRのバージョンを指定することもできるようです。

しかし、.Net Frameworkはアプリ作るときは楽なんですが、運用となるとこのあたりの事を考えないといけないので面倒ですね。

Windows7とWindowServer2008での.NetFramework1.0/1.1

最近まで知らなかったんですが、.Net Framework1.0 と 1.1 は Widnows7,WindowsServer2008 R2 ではサポートされなくなったようです。

これは .Net Framework1.0/1.1 を使ってるユーザには、非常に大きな問題ですよね。

しかし、.Net Framework1.0/1.1 のアプリケーションがWindows7,2008上で全く動かなくなる というわけではなく、冒頭のようにCLR2.0の下位互換性機能によって動くようです。

ただ、完全互換ではないので複雑なアプリケーションだとうまく動かないようですね。

業務アプリケーションで試してみましたが、下位互換性機能では動きませんでした。

参考:

@IT:.NET TIPS ビルド時および実行時のCLRバージョンを取得するには? - C# VB.NET

.NET Frameworkのバージョンを整理する - @IT

Windows Vistaにおける.NETアプリケーションの互換性問題 - Windows Vista徹底解説:ITpro

.NETFrameworkEnvironment - attosoft.info Trac

.NET Framework - Wikipedia

@IT:.NET TIPS サイド・バイ・サイドによりCLRバージョンを指定するには?

MSDN:side-by-side 実行の概要

.NET Framework 1.0/1.1 上で稼働するアプリケーションをお使いのお客様へ - .NET Framework 移行センター