.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バージョンを取得するには?
メソッドやプロパティの有無を確認して呼び出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH