アセンブリの名前はメタデータに格納され、アセンブリのスコープとアプリケーションによる使用に大きな影響を与えます。 厳密な名前のアセンブリには、アセンブリの名前、カルチャ、公開キー、バージョン番号、および必要に応じてプロセッサ アーキテクチャを含む完全修飾名があります。 FullName プロパティを使用して、読み込まれたアセンブリの完全修飾名 (通常は表示名と呼ばれます) を取得します。
ランタイムは、名前情報を使用してアセンブリを検索し、同じ名前の他のアセンブリと区別します。 たとえば、 myTypes
と呼ばれる厳密な名前のアセンブリには、次の完全修飾名を指定できます。
myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
この例では、完全修飾名は、 myTypes
アセンブリが公開キー トークンを持つ厳密な名前を持ち、米国英語のカルチャ値を持ち、バージョン番号が 1.0.1234.0 であることを示しています。 そのプロセッサ アーキテクチャは msil
。つまり、オペレーティング システムとプロセッサに応じて、Just-In-Time (JIT) コンパイルが 32 ビット コードまたは 64 ビット コードにコンパイルされます。
ヒント
ProcessorArchitecture
情報を使用すると、プロセッサ固有のバージョンのアセンブリを使用できます。 ID がプロセッサ アーキテクチャによってのみ異なるアセンブリのバージョン (32 ビットおよび 64 ビットプロセッサ固有のバージョンなど) を作成できます。 プロセッサ アーキテクチャは、厳密な名前には必要ありません。 詳細については、AssemblyName.ProcessorArchitectureを参照してください。
アセンブリ内の型を要求するコードでは、完全修飾アセンブリ名を使用する必要があります。 これは完全修飾バインディングと呼ばれます。 アセンブリ名のみを指定する部分バインディングは、.NET Framework でアセンブリを参照する場合は許可されません。
.NET Framework を構成するアセンブリへのアセンブリ参照には、アセンブリの完全修飾名も含まれている必要があります。 たとえば、バージョン 1.0 の System.Data .NET Framework アセンブリへの参照には、次のようなものがあります。
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
バージョンは、.NET Framework バージョン 1.0 に付属しているすべての .NET Framework アセンブリのバージョン番号に対応します。 .NET Framework アセンブリの場合、カルチャ値は常にニュートラルであり、公開キーは上記の例と同じです。
たとえば、構成ファイルにアセンブリ参照を追加してトレース リスナーを設定するには、システム .NET Framework アセンブリの完全修飾名を含めます。
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
注
アセンブリをバインドするときに、ランタイムは大文字と小文字を区別せずにアセンブリ名を扱いますが、アセンブリ名に使用されている大文字と小文字を保持します。 Windows SDK のいくつかのツールでは、アセンブリ名の大文字と小文字が区別されます。 最適な結果を得るには、大文字と小文字を区別するものとして、アセンブリ名を管理します。
アプリケーション コンポーネントに名前を付けます
ランタイムは、アセンブリの ID を決定するときにファイル名を考慮しません。 アセンブリ名、バージョン、カルチャ、および厳密な名前で構成されるアセンブリ ID は、ランタイムに対して明確にする必要があります。
たとえば、myAssembly.dllというアセンブリを参照する myAssembly.exe というアセンブリがある場合、myAssembly.exe を実行するとバインドが正しく行われます。 ただし、メソッド を使用して別のアプリケーションが AppDomain.ExecuteAssembly 実行される場合、ランタイムは、myAssembly.exeがmyAssembly
へのバインドを要求したときに、myAssembly
が既に読み込まれていると判断します。 この場合、 myAssembly.dll は読み込まれません。 myAssembly.exe には要求された型が含まれていないため、TypeLoadExceptionが発生します。
この問題を回避するには、アプリケーションを構成するアセンブリが同じアセンブリ名を持たないようにするか、異なるディレクトリに同じ名前のアセンブリを配置します。
注
.NET Framework では、グローバル アセンブリ キャッシュに厳密な名前のアセンブリを配置する場合、アセンブリのファイル名は、.exeや .dllなどのファイル名拡張子を含まないアセンブリ名と一致する必要があります。 たとえば、アセンブリのファイル名が myAssembly.dll場合、アセンブリ名は myAssembly
する必要があります。 ルート アプリケーション ディレクトリにのみ配置されるプライベート アセンブリには、ファイル名とは異なるアセンブリ名を指定できます。
こちらも参照ください
.NET