AssemblyName-Klasse

Beschreibt die eindeutige Identität einer Assembly vollständig.

Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class AssemblyName
    Implements _AssemblyName, ICloneable, ISerializable, IDeserializationCallback
'Usage
Dim instance As AssemblyName
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType.None)] 
[ComVisibleAttribute(true)] 
public sealed class AssemblyName : _AssemblyName, ICloneable, ISerializable, 
    IDeserializationCallback
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType::None)] 
[ComVisibleAttribute(true)] 
public ref class AssemblyName sealed : _AssemblyName, ICloneable, ISerializable, 
    IDeserializationCallback
/** @attribute SerializableAttribute() */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class AssemblyName implements _AssemblyName, ICloneable, 
    ISerializable, IDeserializationCallback
SerializableAttribute 
ClassInterfaceAttribute(ClassInterfaceType.None) 
ComVisibleAttribute(true) 
public final class AssemblyName implements _AssemblyName, ICloneable, 
    ISerializable, IDeserializationCallback

Hinweise

Das AssemblyName-Objekt enthält Informationen zu einer Assembly, die Sie verwenden können, um eine Bindung an diese Assembly auszuführen. Die Identität einer Assembly besteht aus Folgendem:

  • einfacher Name

  • Versionsnummer

  • kryptografisches Schlüsselpaar

  • unterstützte Kultur

Der einfache Name ist i. d. R. der Dateiname für die Manifestdatei ohne Erweiterung. Das Schlüsselpaar schließt einen öffentlichen und einen privaten Schlüssel ein, anhand derer für Assemblys Signaturen mit starkem Namen erstellt werden.

Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus. Durch die Reflektion wird auf Anforderung ein ergänzter Name entsprechend den folgenden Konventionen gebildet.

Trennzeichen

Bedeutung

Umgekehrter Schrägstrich (\)

Escapezeichen.

Komma (,)

Wird dem Assemblynamen vorangestellt.

Pluszeichen (+)

Wird einer geschachtelten Klasse vorangestellt.

Der vollqualifizierte Name einer Klasse könnte z. B. wie folgt lauten:

ContainingClass+NestedClass,MyAssembly

Aus "++" wird "\+\+", und aus "\" wird "\\".

Dieser gekennzeichnete Name kann beibehalten und später zum Laden des Type verwendet werden. Verwenden Sie GetType entweder nur mit dem Typnamen oder mit dem durch die Assembly gekennzeichneten Typnamen, um einen Type zu suchen und zu laden. Wenn nur der Typname angegeben wird, sucht GetType in der Assembly des Aufrufers und danach in der Systemassembly nach Type. Wenn der durch die Assembly gekennzeichnete Typname angegeben wird, sucht GetType in einer beliebigen Assembly nach Type.

Ein vollständiger AssemblyName muss Parameter für Name, Kultur, öffentlichen Schlüssel bzw. das Token des öffentlichen Schlüssels, Hauptversion, Nebenversion, Buildnummer und Revisionsnummer enthalten. Die letzten vier Parameter werden im Version-Typ zusammengefasst.

Erstellen Sie zum Generieren eines einfachen Namens ein AssemblyName-Objekt mithilfe des Standardkonstruktors, und legen Sie Name fest. Die anderen Eigenschaften sind optional.

Erstellen Sie zum Generieren eines vollständigen starken Namens ein AssemblyName-Objekt mithilfe des Standardkonstruktors, und legen Sie Name und KeyPair fest. Die anderen Eigenschaften sind optional. Legen Sie den öffentlichen Schlüssel und den starken Namen mithilfe von SetPublicKey und SetPublicKeyToken fest. Beim Signieren mit dem starken Namen wird immer der SHA1-Hashalgorithmus verwendet.

Um die korrekte Bildung der Namen zu gewährleisten, verwenden Sie die folgenden Eigenschaften:

Sie können den Namen auch abrufen, indem Sie die Option /l in Verbindung mit Global Assembly Cache-Tool (Gacutil.exe) verwenden.

Erstellen Sie zum Generieren eines unvollständigen starken Namens ein AssemblyName-Objekt mithilfe des Standardkonstruktors, und legen Sie den Namen und den öffentlichen Schlüssel fest. Eine mit einem solchen AssemblyName generierte Assembly kann später mit Assembly Linker (al.exe) signiert werden.

Es ist möglich, einen öffentlichen Schlüssel und ein KeyPair mit inkonsistenten Werten anzugeben. Dies kann im Entwicklungsstadium hilfreich sein. In diesem Fall gibt der mit GetPublicKey abgerufene öffentliche Schlüssel den richtigen öffentlichen Schlüssel an, während KeyPair den privaten und den öffentlichen Schlüssel angibt, die bei der Entwicklung verwendet wurden. Wenn die Laufzeit feststellt, dass KeyPair und der öffentliche Schlüssel nicht übereinstimmen, wird der korrekte Schlüssel, der mit dem öffentlichen Schlüssel übereinstimmt, in der Registrierung gesucht.

Der Anzeigename von AssemblyName wird wie folgt als durch Trennzeichen getrennte Unicode-Zeichenfolge formatiert, die mit dem Namen beginnt:

Name <,Culture = CultureInfo> <,Version = Major.Minor.Build.Revision> <, StrongName> <,PublicKeyToken> '\0'

Name ist der wörtliche Name der Assembly. CultureInfo ist die im Format laut RFC1766 definierte Kultur. Major, Minor, Build und Revision sind Hauptversions-, Nebenversions-, Buildnummer und Revisionsnummer der Assembly. StrongName sind die niederwertigen 64 Bits des Hashwerts des öffentlichen Schlüssels in Hexadezimalcodierung, der mit dem SHA-1-Hashalgorithmus und dem durch SetPublicKey angegebenen öffentlichen Schlüssel generiert wurde. PublicKeyToken ist der öffentliche Schlüssel in Hexadezimalcodierung, der durch SetPublicKey angegeben wird.

Die Hexadezimalcodierung bezeichnet die Konvertierung jedes einzelnen Bytes eines binären Objekts in zwei Hexadezimalzeichen, beginnend mit dem niederstwertigen Byte. Zusätzliche Anzeigewerte werden nach Bedarf hinzugefügt.

Wenn der vollständige öffentliche Schlüssel bekannt ist, kann PublicKey durch StrongName ersetzt werden.

Beachten Sie außerdem, dass abgesehen von Name, der zuerst angegeben werden muss, die lexikalische Reihenfolge der Parameter ohne Bedeutung ist. Wenn jedoch ein Parameter (Version, Culture, StrongName oder PublicKey) nicht ausdrücklich festgelegt wird, gilt dieser als ausgelassen und der AssemblyName als unvollständig. Wenn Sie unvollständige Informationen angeben, müssen die Name-Parameter in der oben beschriebenen Reihenfolge angegeben werden.

Wenn Sie einen Anzeigenamen angeben, wird durch die Konvention StrongName =null oder PublicKey= null angegeben, dass das Binden und Suchen einer Übereinstimmung mit einer Assembly mit einfachem Namen erforderlich ist. Zusätzlich gibt die Konvention Culture= "" (doppelte Anführungszeichen stehen für eine leere Zeichenfolge) das Suchen einer Übereinstimmung mit der Standardkultur an.

Im folgenden Codebeispiel wird ein AssemblyName für eine einfach benannte Assembly mit Standardkultur angegeben.

com.microsoft.crypto,
    Culture=""

Im folgenden Codebeispiel wird ein vollständiger Verweis auf eine Assembly mit starkem Namen und der Kultur "en" gegeben.

com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012, Version=1.0.0.0

Beispiel

In diesem Beispiel wird die Verwendung verschiedener Reflektionsklassen zur Analyse der in einer Assembly enthaltenen Metadaten veranschaulicht.

Imports System
Imports System.Reflection

Module Module1

    Sub Main()
        ' This variable holds the amount of indenting that 
        ' should be used when displaying each line of information.
        Dim indent As Int32 = 0
        ' Display information about the EXE assembly.
        Dim a As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly()
        Display(indent, "Assembly identity={0}", a.FullName)
        Display(indent + 1, "Codebase={0}", a.CodeBase)

        ' Display the set of assemblies our assemblies references.
        Dim an As AssemblyName
        Display(indent, "Referenced assemblies:")
        For Each an In a.GetReferencedAssemblies()
            Display(indent + 1, "Name={0}, Version={1}, Culture={2}, PublicKey token={3}", _
                an.Name, an.Version, an.CultureInfo.Name, BitConverter.ToString(an.GetPublicKeyToken))
        Next
        Display(indent, "")

        ' Display information about each assembly loading into this AppDomain.
        For Each a In AppDomain.CurrentDomain.GetAssemblies()
            Display(indent, "Assembly: {0}", a)

            ' Display information about each module of this assembly.
            Dim m As [Module]
            For Each m In a.GetModules(True)
                Display(indent + 1, "Module: {0}", m.Name)
            Next

            ' Display information about each type exported from this assembly.
            Dim t As Type
            indent += 1
            For Each t In a.GetExportedTypes()
                Display(0, "")
                Display(indent, "Type: {0}", t)

                ' For each type, show its members & their custom attributes.
                Dim mi As MemberInfo
                indent += 1
                For Each mi In t.GetMembers()
                    Display(indent, "Member: {0}", mi.Name)
                    DisplayAttributes(indent, mi)

                    ' If the member is a method, display information about its parameters.
                    Dim pi As ParameterInfo
                    If mi.MemberType = MemberTypes.Method Then
                        For Each pi In CType(mi, MethodInfo).GetParameters()
                            Display(indent + 1, "Parameter: Type={0}, Name={1}", pi.ParameterType, pi.Name)
                        Next
                    End If

                    ' If the member is a property, display information about the property's accessor methods.
                    If mi.MemberType = MemberTypes.Property Then
                        Dim am As MethodInfo
                        For Each am In CType(mi, PropertyInfo).GetAccessors()
                            Display(indent + 1, "Accessor method: {0}", am)
                        Next
                    End If
                Next
                indent -= 1
            Next
            indent -= 1
        Next
    End Sub

    ' Displays the custom attributes applied to the specified member.
    Sub DisplayAttributes(ByVal indent As Int32, ByVal mi As MemberInfo)
        ' Get the set of custom attributes; if none exist, just return.
        Dim attrs() As Object = mi.GetCustomAttributes(False)
        If attrs.Length = 0 Then Return

        ' Display the custom attributes applied to this member.
        Display(indent + 1, "Attributes:")
        Dim o As Object
        For Each o In attrs
            Display(indent + 2, "{0}", o.ToString())
        Next
    End Sub

    ' Display a formatted string indented by the specified amount.
    Sub Display(ByVal indent As Int32, ByVal format As String, ByVal ParamArray params() As Object)
        Console.Write(New String(" "c, indent * 2))
        Console.WriteLine(format, params)
    End Sub
End Module

'The output shown below is abbreviated.
'
'Assembly identity=Reflection, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
'  Codebase=file:///C:/Reflection.exe
'Referenced assemblies:
'  Name=mscorlib, Version=1.0.5000.0, Culture=, PublicKey token=B7-7A-5C-56-19-34-E0-89
'  Name=Microsoft.VisualBasic, Version=7.0.5000.0, Culture=, PublicKey token=B0-3F-5F-7F-11-D5-0A-3A
'
'Assembly: mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
'  Module: mscorlib.dll
'  Module: prc.nlp
'  Module: prcp.nlp
'  Module: ksc.nlp
'  Module: ctype.nlp
'  Module: xjis.nlp
'  Module: bopomofo.nlp
'  Module: culture.nlp
'  Module: region.nlp
'  Module: sortkey.nlp
'  Module: charinfo.nlp
'  Module: big5.nlp
'  Module: sorttbls.nlp
'  Module: l_intl.nlp
'  Module: l_except.nlp
'
'  Type: System.Object
'    Member: GetHashCode
'    Member: Equals
'      Parameter: Type=System.Object, Name=obj
'    Member: ToString
'    Member: Equals
'      Parameter: Type=System.Object, Name=objA
'      Parameter: Type=System.Object, Name=objB
'    Member: ReferenceEquals
'      Parameter: Type=System.Object, Name=objA
'      Parameter: Type=System.Object, Name=objB
'    Member: GetType
'    Member: .ctor
'
'  Type: System.ICloneable
'    Member: Clone
'
'  Type: System.Collections.IEnumerable
'    Member: GetEnumerator
'      Attributes:
'        System.Runtime.InteropServices.DispIdAttribute
'
'  Type: System.Collections.ICollection
'    Member: get_IsSynchronized
'    Member: get_SyncRoot
'    Member: get_Count
'    Member: CopyTo
'      Parameter: Type=System.Array, Name=array
'      Parameter: Type=System.Int32, Name=index
'    Member: Count
'      Accessor method: Int32 get_Count()
'    Member: SyncRoot
'      Accessor method: System.Object get_SyncRoot()
'    Member: IsSynchronized
'      Accessor method: Boolean get_IsSynchronized()
'

Vererbungshierarchie

System.Object
  System.Reflection.AssemblyName

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

AssemblyName-Member
System.Reflection-Namespace
Version
GetPublicKey
GetPublicKeyToken
SetPublicKey
SetPublicKeyToken
FullName
GetType
AssemblyQualifiedName

Weitere Ressourcen

Angeben vollständig gekennzeichneter Typnamen