解説インサイド .NET Framework第4回 アセンブリのロード(前編) インフォテリア株式会社 |
始めに
前回はアセンブリのアイデンティティについて解説した。アセンブリのアイデンティティは簡易名、バージョン、カルチャ、公開キーの4つの部分からなるデータ構造であり、アセンブリのメタデータには自分自身のアイデンティティの情報と、そのアセンブリが参照しているほかのアセンブリの情報が含まれている。
Common Language Runtime(CLR)上でコードが実行されたときに、そのコードがほかのアセンブリに含まれている型を参照していると、CLRはそのアセンブリをメモリ上にロードする。今回は、そのロード手順を解説しよう。なお、前回説明したとおり、.NET Framework上での開発では、ほぼすべての場合でアセンブリには厳密名を付けなければならない。そのため、今回の解説はすべて、アセンブリには厳密名が付いているものと仮定している。あいまいな名前のアセンブリをロードする手順は本稿の解説とは異なる可能性があるので、特に言及していない場合でも注意してほしい。
サンプル・アプリケーション
今回の記事で共通に利用するコードは次のようなものだ。
|
|
本稿で共通して利用するサンプル・コードutil.cs |
util.csは次のコマンドでコンパイルする。
% csc /t:module util.cs
さらに、次のコマンドでアセンブリにする。この結果、「util.dll」と「util.netmodule」という名前の2つのモジュールからなるマルチ・ファイル・アセンブリが作成されることになる(CSPコンテナ(CspContainer)については「第2回 アセンブリのアイデンティティ(前編)」で解説している)。
% al /t:library /out:util.dll /version:1.0 /keyname:CspContainer util.netmodule
2つのモジュールからなるマルチ・ファイル・アセンブリ(アセンブリの表示名は“util, version=1.0.0.0, culture=neutral, publickeytoken=52aa3cb48fd943e1”) |
さらに、このアセンブリを利用するアプリケーション・コードを次のように定義した。
|
|
上記のアセンブリを利用するサンプル・コードuser.cs |
これを次のコマンドでコンパイルする。これでutilアセンブリを参照するuser.exeが作成される。
% csc /noconfig /r:util.dll user.cs
それでは、上記のコードを例に、アセンブリがどのようにロードされるのかを解説していこう。
INDEX | ||
解説 インサイド .NET Framework | ||
第4回 アセンブリのロード(前編) | ||
1.始めにサンプル・アプリケーション | ||
2.アセンブリのロード 1〜2段階 | ||
3.GACとコードベース | ||
「解説:インサイド .NET Framework 」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|