AssemblynamenAssembly Names

Der Name einer Assembly wird in Metadaten gespeichert und wirkt sich erheblich auf den Geltungsbereich einer Assembly aus. Zudem hat er Einfluss darauf, wie die Assembly von einer Anwendung verwendet wird.An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. Eine Assembly mit starkem Namen hat einen vollqualifizierten Namen, der den Namen, die Kultur, den öffentlichen Schlüssel und die Versionsnummer der Assembly enthält.A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. Dies wird häufig als Anzeigename bezeichnet. Für geladenen Assemblys kann er mit der FullName-Eigenschaft abgerufen werden.This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

Die Runtime verwendet diese Informationen, um nach der Assembly zu suchen und sie von anderen Assemblys mit dem gleichen Namen zu unterscheiden.The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. Eine Assembly mit dem starken Namen myTypes könnte z.B. folgenden vollqualifizierten Namen haben: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  

Hinweis

In .NET Framework Version 2.0 wird Prozessorarchitektur zur Assemblyidentität hinzugefügt. Dies macht prozessorspezifische Assemblyversionen möglich.Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. Sie können Versionen einer Assembly erstellen, deren Identität sich nur in der Prozessorarchitektur unterschiedet, z.B. prozessorspezifische 32-Bit- und 64-Bit-Versionen.You can create versions of an assembly whose identity differs only by processor architecture, for example 32-bit and 64-bit processor-specific versions. Die Prozessorarchitektur ist für starke Namen nicht unbedingt erforderlich.Processor architecture is not required for strong names. Weitere Informationen finden Sie unter AssemblyName.ProcessorArchitecture.For more information, see AssemblyName.ProcessorArchitecture.

In diesem Beispiel gibt der vollqualifizierte Name an, dass die Assembly myTypes einen starken Namen mit einem öffentlichen Schlüsseltoken hat, den Kulturwert für Englisch (USA) und die Versionsnummer 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. Seine Prozessorarchitektur ist „msil“. Das heißt, dass er in 32-Bit- oder 64-Bit-Code JIT-kompiliert (Just-In-Time) wird, je nach Betriebssystem und Prozessor.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, der Typen in einer Assembly anfordert, muss einen vollqualifizierten Assemblynamen verwenden.Code that requests types in an assembly must use a fully qualified assembly name. Dies wird als vollqualifizierte Bindung bezeichnet.This is called fully qualified binding. Die Teilbindung, die nur einen Assemblynamen angibt, ist nicht zulässig, wenn auf Assemblys in .NET Framework verwiesen wird.Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

Alles Assemblyverweise auf Assemblys, aus denen .NET Framework besteht, müssen auch einen vollqualifizierten Namen der Assembly enthalten.All assembly references to assemblies that make up the .NET Framework also must contain a fully qualified name of the assembly. Der Verweis auf die System.Data-Assembly von .NET Framework würde für Version 1.0 z.B. Folgendes enthalten: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  

Beachten Sie, dass die Version den Versionsnummern aller Assemblys von .NET Framework entspricht, die mit .NET Framework Version 1.0 geliefert wurden.Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 1.0. Der Kulturwert von Assemblys von .NET Framework ist immer neutral, und der öffentliche Schlüssel entspricht dem im oben stehenden Beispiel gezeigten Schlüssel.For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

Um z.B. einen Assemblyverweis in eine Konfigurationsdatei einzufügen, um einen Ablaufverfolgungslistener einzurichten, beziehen Sie den vollqualifizierten der Systemassembly von .NET Framework mit ein: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" />  

Hinweis

Die Runtime beachtet bei Assemblynamen keine Groß- und Kleinschreibung, wenn sie diese an Assemblys bindet. Die im Assemblynamen verwendete Schreibweise wird aber beibehalten.The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Mehrere Funktionen in Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) achten bei Assemblynamen auf Groß- und Kleinschreibung.Several tools in the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) handle assembly names as case-sensitive. Die besten Ergebnisse erhalten Sie, wenn Sie bei Assemblynamen Groß- und Kleinschreibung beachten.For best results, manage assembly names as though they were case-sensitive.

NamensanwendungskomponentenNaming Application Components

Die Runtime achtet nicht auf den Dateinamen, wenn sie die Identität einer Assembly bestimmt.The runtime does not consider the file name when determining an assembly's identity. Die Assemblyidentität, die aus dem Assemblynamen, deren Version, Kultur und starkem Namen besteht, muss für die Runtime eindeutig sein.The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

Wenn Sie z.B. eine Assembly mit dem Namen „meineAssembly.exe“ haben, die auf eine Assembly mit dem Namen „meineAssembly.dll“ verweist, können Sie die Bindung ordnungsgemäß durchführen, indem Sie „meineAssembly.exe“ ausführen.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. Wenn allerdings eine andere Anwendung „meineAssembly.exe“ mit der AppDomain.ExecuteAssembly-Methode ausführt, gibt die Runtime an, dass „meineAssembly“ bereits geladen wurde, wenn „meineAssembly.exe“ die Bindung an „meineAssembly“ anfordert.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." In diesem Fall wird „meineAssembly.dll“ nicht geladen.In this case, myAssembly.dll is never loaded. Da „meineAssembly.exe“ den angeforderten nicht Typ enthält, wird eine TypeLoadException ausgelöst.Because myAssembly.exe does not contain the requested type, a TypeLoadException occurs.

Um dieses Problem zu vermeiden, achten Sie darauf, dass die Assemblys, aus denen Ihre Anwendung besteht, nicht denselben Assemblynamen haben. Alternativ können Sie Assemblys mit dem gleichen Namen auch in unterschiedliche Verzeichnisse platzieren.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.

Hinweis

Wenn Sie eine Assembly mit starkem Namen in den globalen Assemblycache einfügen, muss der Dateiname der Assembly mit dem Assemblynamen übereinstimmen (davon ausgenommen sind Erweiterungen des Dateinamen wie „.exe“ oder „.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). Wenn der Dateiname einer Assembly z.B. „meineAssembly.dll“ ist, muss der Assemblyname „meineAssembly“ sein.For example, if the file name of an assembly is myAssembly.dll, the assembly name must be myAssembly. Private Assemblys, die nur im Stammanwendungsverzeichnis bereitgestellt wurden, können einen Assemblynamen haben, der sich vom Dateinamen unterscheidet.Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

Siehe auchSee also