.NET TIPS

サイド・バイ・サイドによりCLRバージョンを指定するには?

デジタルアドバンテージ 一色 政彦
2005/09/09

 .NET Frameworkは、これまですでに1.0から1.1へのバージョン・アップが行われている。従って現行では、 .NETアプリケーションには、.NET Framework 1.0で作成されたアプリケーション(以降、.NET 1.0アプリ)と1.1で作成されたアプリケーション(以降、.NET 1.1アプリ)がある。

 それぞれの.NETアプリケーションが実行される際、基本的には、.NET 1.0アプリは、バージョン1.0のCLR(=実行環境)(以降、CLR 1.0)上で動作し、.NET 1.1アプリはバージョン1.1のCLR(以降、CLR 1.1)上で動作する。つまり.NETでは、アプリケーションを作ったときの実行環境のバージョンと、実行されるときの実行環境のバージョンが一致するような仕組みを持っている。これはCLRの「サイド・バイ・サイド実行」(Side-By-Side Execution)と呼ばれる機能である。

 しかし場合によっては、.NET 1.0アプリをCLR 1.1上で動かしたい場合や、逆に.NET 1.1アプリをCLR 1.0で動かしたいことがある。このような問題に対しては、サイド・バイ・サイド実行時の「CLRのバージョン指定」が活用できる。

■構成ファイルによるCLRのバージョン指定

 CLRのサイド・バイ・サイド実行機能によるCLRバージョンの指定は、

<アプリケーション名>.exe.config

という(XML形式の)構成ファイルによって行う。この構成ファイルをアプリケーションと同じフォルダ内に配置するだけで、CLRのバージョン指定が働くようになる。例えば、そのアプリケーションが「DotNet11.exe」だとすると、そのアプリケーションと同じフォルダに「DotNet11.exe.config」という構成ファイルを置けばよいわけだ。

 ここでは、例として、.NET 1.1アプリがCLR 1.0で優先的に動作するような構成ファイルを作成してみよう(当然ながら、この.NET 1.1アプリが、.NET Framework 1.0では使えないクラスやメソッドを使用している場合には、実行時にエラーになる)。その具体的な構成ファイルの内容は以下のとおりだ。

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v1.0.3705" />
    <supportedRuntime version="v1.1.4322" />
  </startup>
</configuration>
CLRのバージョンを指定する構成ファイル(DotNet11.exe.config)

 構成ファイルによるCLRのバージョン指定では、<configuration>要素配下の<startup>要素の中に、<supportedRuntime>要素を記述すればよい。この<supportedRuntime>要素のversion属性により、実行時に使用されるCLRのバージョンを指定することができる。

 上記の記述例では、<supportedRuntime>要素が「v1.0.3705」「v1.1.4322」と順に記述されており、これがCLRバージョン指定の優先順位を示している。つまり、バージョン「1.0.3705」のCLR(=CLR 1.0)があればそれを使い、なければ「1.1.4322」のCLR(=CLR 1.1)を使うという指定だ(なお、<supportedRuntime>要素は.NET Framework 1.1で導入されたものである。これはXMLの要素なので、.NET Framework 1.0で読み込まれても、無視されるだけで、エラーにはならない)。

 この構成ファイルを使うアプリケーション(DotNet11.exe)を.NET Framework 1.1と1.0が両方入っている環境で実行すると、正しくCLR 1.0上で実行されるはずだ(構成ファイルがない場合には、CLR 1.1上で実行される)。このアプリケーションの実行を実際に試せるように、本稿ではサンプル・アプリケーション(実行ファイルのみ)を用意した。これは以下のリンクからダウンロードできる。

 なおこのサンプル・アプリケーションでは、作成したときの.NET Frameworkのバージョンのことを「ビルド時のCLRバージョン」と、アプリケーションを実際に実行するときのCLRのバージョンのことを「実行時のCLRバージョン」と表記している。ソース・コードは割愛するが、実行時のCLRバージョンを取得する方法などについては、「TIPS:ビルド時および実行時のCLRバージョンを取得するには?」を参照してほしい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:アセンブリ
関連TIPS:ビルド時および実行時のCLRバージョンを取得するには?
 
この記事と関連性の高い別の.NET TIPS
ビルド時および実行時のCLRバージョンを取得するには?
メソッドやプロパティの有無を確認して呼び出すには?
Windowsフォームで構成ファイルによりプロパティ値を設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH