Freigeben über


Assemblynamen

Der Name einer Assembly wird in Metadaten gespeichert und hat erhebliche Auswirkungen auf den Bereich der Assembly und die Verwendung durch eine Anwendung. Eine Assembly mit starkem Namen hat einen vollqualifizierten Namen, der den Namen, die Kultur, den öffentlichen Schlüssel, die Versionsnummer und optional die Prozessorarchitektur der Assembly enthält. Verwenden Sie die FullName-Eigenschaft, um den vollqualifizierten Namen, häufig als Anzeigename bezeichnet, für geladene Assemblys abzurufen.

Die Laufzeit verwendet die Namensinformationen, um die Assembly zu suchen und sie von anderen Assemblys mit demselben Namen zu unterscheiden. Eine Assembly mit dem starken Namen myTypes könnte z.B. folgenden vollqualifizierten Namen haben:

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

In diesem Beispiel gibt der vollqualifizierte Name an, dass die myTypes assembly einen starken Namen mit einem öffentlichen Schlüsseltoken hat, die Kulturangabe für Englisch in den Vereinigten Staaten aufweist und eine Versionsnummer von 1.0.1234.0 hat. Die Prozessorarchitektur ist msil, was bedeutet, dass der Code, je nach Betriebssystem und Prozessor, just-in-time (JIT) zu 32-Bit- oder 64-Bit-Code kompiliert wird.

Tipp

Die ProcessorArchitecture Informationen ermöglichen prozessorspezifische Versionen von Assemblys. Sie können Versionen einer Assembly erstellen, deren Identität sich nur von der Prozessorarchitektur unterscheidet, z. B. 32-Bit- und 64-Bit-prozessorspezifische Versionen. Die Prozessorarchitektur ist für starke Namen nicht erforderlich. Weitere Informationen finden Sie unter AssemblyName.ProcessorArchitecture.

Code, der Typen in einer Assembly anfordert, muss einen vollqualifizierten Assemblynamen verwenden. Dies wird als vollqualifizierte Bindung bezeichnet. Partielle Bindung, die nur einen Assemblynamen angibt, ist beim Verweisen auf Assemblys in .NET Framework nicht zulässig.

Alle Assemblyverweise auf Assemblys, aus denen .NET Framework besteht, müssen auch den vollqualifizierten Namen der Assembly enthalten. Beispielsweise würde ein Verweis auf die System.Data .NET Framework-Assembly für Version 1.0 Folgendes umfassen:

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

Die Version entspricht der Versionsnummer aller .NET Framework-Assemblys, die mit .NET Framework, Version 1.0 ausgeliefert wurden. Bei .NET Framework-Assemblys ist der Kulturwert immer neutral, und der öffentliche Schlüssel ist identisch mit dem im obigen Beispiel gezeigten.

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:

<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. Mehrere Funktionen im Windows SDK unterscheiden bei Assemblynamen zwischen Groß- und Kleinschreibung. Die besten Ergebnisse erhalten Sie, wenn Sie bei Assemblynamen Groß- und Kleinschreibung beachten.

Anwendungskomponenten benennen

Die Laufzeit berücksichtigt beim Bestimmen der Identität einer Assembly nicht den Dateinamen. Die Assemblyidentität, die aus dem Assemblynamen, deren Version, Kultur und starkem Namen besteht, muss für die Runtime eindeutig sein.

Wenn Sie beispielsweise über eine Assembly namens myAssembly.exe verfügen, die auf eine Assembly mit dem Namen myAssembly.dllverweist, tritt die Bindung ordnungsgemäß auf, wenn Sie myAssembly.exeausführen. Wenn jedoch eine andere Anwendung myAssembly.exe unter Verwendung der Methode AppDomain.ExecuteAssembly ausführt, bestimmt die Laufzeit, dass myAssembly bereits geladen ist, wenn myAssembly.exe die Bindung an myAssembly anfordert. In diesem Fall wird myAssembly.dll nie geladen. Da myAssembly.exe den angeforderten Typ nicht enthält, wird eine TypeLoadException ausgelöst.

Um dieses Problem zu vermeiden, stellen Sie sicher, dass die Assemblys, aus denen Ihre Anwendung besteht, nicht denselben Assemblynamen haben, oder platzieren Sie Assemblys mit demselben Namen in verschiedenen Verzeichnissen.

Hinweis

Wenn Sie in .NET Framework eine assembly mit starkem Namen im globalen Assemblycache ablegen, muss der Dateiname der Assembly mit dem Assemblynamen übereinstimmen, nicht einschließlich der Dateinamenerweiterung, z. B. .exe oder .dll. Wenn beispielsweise der Dateiname einer Assembly myAssembly.dllist, muss der Assemblyname sein myAssembly. Private Assemblys, die nur im Stammanwendungsverzeichnis bereitgestellt werden, können einen Assemblynamen haben, der sich vom Dateinamen unterscheidet.

Siehe auch