アセンブリ名Assembly Names

アセンブリの名前は、メタデータに保存され、アセンブリのスコープに重大な影響があり、アプリケーションによって使用されます。An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. 厳密な名前のアセンブリには、アセンブリの名前、カルチャ、公開キー、バージョン番号を含む、完全修飾名があります。A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. これは、表示名として、また、FullName プロパティを使用して取得できる読み込まれたアセンブリに対して、頻繁に参照されます。This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

ランタイムはこの情報を使用して、アセンブリを検索し、同じ名前のその他のアセンブリと区別します。The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. たとえば、myTypes と呼ばれる厳密な名前のアセンブリは、次の完全修飾名を持つ場合があります。For example, a strong-named assembly called myTypes could have the following fully qualified name:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil  

注意

プロセッサ アーキテクチャは、アセンブリのプロセッサ固有バージョンを許可するために、.NET Framework バージョン 2.0 のアセンブリ ID に追加されます。Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. ID のプロセッサ アーキテクチャ (たとえば、32 ビットおよび 64 ビットのプロセッサ固有バージョン) のみが異なる、アセンブリのバージョンを作成できます。You can create versions of an assembly whose identity differs only by processor architecture, for example 32-bit and 64-bit processor-specific versions. プロセッサ アーキテクチャは、厳密な名前には必要ありません。Processor architecture is not required for strong names. 詳細については、AssemblyName.ProcessorArchitecture を参照してください。For more information, see AssemblyName.ProcessorArchitecture.

この例の完全修飾名は、myTypes アセンブリには公開キー トークンを持つ厳密な名前があり、英語 (米国) のカルチャの値があり、1.0.1234.0 のバージョン番号があることを示しています。In this example, the fully qualified name indicates that the myTypes assembly has a strong name with a public key token, has the culture value for US English, and has a version number of 1.0.1234.0. そのプロセッサ アーキテクチャは "msil" です。つまり、オペレーティング システムやプロセッサに応じて、32 ビット コードまたは 64 ビット コードに Just-In-Time (JIT) でコンパイルされるということです。Its processor architecture is "msil", which means that it will be just-in-time (JIT)-compiled to 32-bit code or 64-bit code depending on the operating system and processor.

アセンブリの型を要求するコードは、完全修飾のアセンブリ名を使用する必要があります。Code that requests types in an assembly must use a fully qualified assembly name. これは、完全修飾のバインドと呼ばれます。This is called fully qualified binding. アセンブリ名のみを指定する部分的バインドは、.NET Framework のアセンブリを参照している場合は許可されません。Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

また、.NET Framework を構成するアセンブリを参照するアセンブリにはすべて、アセンブリの完全修飾名も含める必要があります。All assembly references to assemblies that make up the .NET Framework also must contain a fully qualified name of the assembly. たとえば、バージョン 1.0 の System.Data .NET Framework アセンブリを参照するには、次が含まれます。For example, to reference the System.Data .NET Framework assembly for version 1.0 would include:

System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089  

このバージョンは、.NET Framework バージョン 1.0 に同梱されているすべての .NET Framework アセンブリのバージョン番号に対応しています。Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 1.0. .NET Framework アセンブリでは、カルチャの値は常にニュートラルであり、公開キーは上記の例に示したものと同じです。For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

たとえば、トレース リスナーを設定するために、構成ファイルにアセンブリ参照を追加するには、システムの .NET Framework アセンブリの完全修飾名を含めます。For example, to add an assembly reference in a configuration file to set up a trace listener, you would include the fully qualified name of the system .NET Framework assembly:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />  

注意

アセンブリをバインドするときに、ランタイムは大文字と小文字を区別せずにアセンブリ名を扱いますが、アセンブリ名に使用されている大文字と小文字を保持します。The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Windows Software Development Kit (SDK) のいくつかのツールでは、アセンブリ名の大文字小文字を区別して処理します。Several tools in the Windows Software Development Kit (SDK) handle assembly names as case-sensitive. 最適な結果を得るには、大文字と小文字を区別するものとして、アセンブリ名を管理します。For best results, manage assembly names as though they were case-sensitive.

名前付けアプリケーション コンポーネントNaming Application Components

アセンブリの ID を特定するときに、ランタイムではファイル名が考慮されません。The runtime does not consider the file name when determining an assembly's identity. アセンブリ名、バージョン、カルチャ、厳密な名前で構成されるアセンブリ ID は、ランタイムに対して明確である必要があります。The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

たとえば、myAssembly.dll という名前のアセンブリを参照する myAssembly.exe という名前のアセンブリがある場合は、myAssembly.exe を実行すると、バインドが正しく行われます。For example, if you have an assembly called myAssembly.exe that references an assembly called myAssembly.dll, binding occurs correctly if you execute myAssembly.exe. ただし、別のアプリケーションがメソッド AppDomain.ExecuteAssembly を使用して myAssembly.exe を実行する場合、ランタイムは myAssembly.exe が "myAssembly" へのバインドを要求するときに、"myAssembly" は既に読み込まれていると判断します。However, if another application executes myAssembly.exe using the method AppDomain.ExecuteAssembly, the runtime determines that "myAssembly" is already loaded when myAssembly.exe requests binding to "myAssembly." この場合、myAssembly.dll が読み込まれることはありません。In this case, myAssembly.dll is never loaded. myAssembly.exe には、要求された型が含まれていないため、TypeLoadException が発生します。Because myAssembly.exe does not contain the requested type, a TypeLoadException occurs.

この問題を避けるには、アプリケーションを構成するアセンブリが、確実に同じアセンブリ名を持たないように、または異なるディレクトリに同じ名前を持つアセンブリを配置しないようにします。To avoid this problem, make sure the assemblies that make up your application do not have the same assembly name or place assemblies with the same name in different directories.

注意

グローバル アセンブリ キャッシュに厳密な名前のアセンブリを配置した場合、アセンブリのファイル名は、アセンブリ名と一致する必要があります (.exe または .dll などのファイル名の拡張子を除く)。If you put a strong-named assembly in the global assembly cache, the assembly's file name must match the assembly name (not including the file name extension, such as .exe or .dll). たとえば、アセンブリのファイル名が myAssembly.dll である場合は、アセンブリ名は myAssembly である必要があります。For example, if the file name of an assembly is myAssembly.dll, the assembly name must be myAssembly. ルート アプリケーション ディレクトリにのみ展開されるプライベート アセンブリは、ファイル名とは異なるアセンブリ名を持つことができます。Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

関連項目See also