Leggi in inglese

Condividi tramite


AssemblyName Classe

Definizione

Descrive in modo completo l'identità univoca di un assembly.

C#
public sealed class AssemblyName
C#
public sealed class AssemblyName : ICloneable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
C#
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public sealed class AssemblyName : ICloneable, System.Runtime.InteropServices._AssemblyName, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
C#
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyName : ICloneable, System.Runtime.InteropServices._AssemblyName, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
Ereditarietà
AssemblyName
Attributi
Implementazioni

Esempio

In questo esempio viene illustrato come usare varie classi di reflection per analizzare i metadati contenuti in un assembly.

C#
using System;
using System.Reflection;

class Module1
{
    public static void Main()
    {
        // This variable holds the amount of indenting that
        // should be used when displaying each line of information.
        Int32 indent = 0;
        // Display information about the EXE assembly.
        Assembly a = typeof(Module1).Assembly;
        Display(indent, "Assembly identity={0}", a.FullName);
        Display(indent+1, "Codebase={0}", a.CodeBase);

        // Display the set of assemblies our assemblies reference.

        Display(indent, "Referenced assemblies:");
        foreach (AssemblyName 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())));
        }
        Display(indent, "");

        // Display information about each assembly loading into this AppDomain.
        foreach (Assembly b in AppDomain.CurrentDomain.GetAssemblies())
        {
            Display(indent, "Assembly: {0}", b);

            // Display information about each module of this assembly.
            foreach ( Module m in b.GetModules(true) )
            {
                Display(indent+1, "Module: {0}", m.Name);
            }

            // Display information about each type exported from this assembly.

            indent += 1;
            foreach ( Type t in b.GetExportedTypes() )
            {
                Display(0, "");
                Display(indent, "Type: {0}", t);

                // For each type, show its members & their custom attributes.

                indent += 1;
                foreach (MemberInfo mi in t.GetMembers() )
                {
                    Display(indent, "Member: {0}", mi.Name);
                    DisplayAttributes(indent, mi);

                    // If the member is a method, display information about its parameters.

                    if (mi.MemberType==MemberTypes.Method)
                    {
                        foreach ( ParameterInfo pi in ((MethodInfo) mi).GetParameters() )
                        {
                            Display(indent+1, "Parameter: Type={0}, Name={1}", pi.ParameterType, pi.Name);
                        }
                    }

                    // If the member is a property, display information about the property's accessor methods.
                    if (mi.MemberType==MemberTypes.Property)
                    {
                        foreach ( MethodInfo am in ((PropertyInfo) mi).GetAccessors() )
                        {
                            Display(indent+1, "Accessor method: {0}", am);
                        }
                    }
                }
                indent -= 1;
            }
            indent -= 1;
        }
    }

    // Displays the custom attributes applied to the specified member.
    public static void DisplayAttributes(Int32 indent, MemberInfo mi)
    {
        // Get the set of custom attributes; if none exist, just return.
        object[] attrs = mi.GetCustomAttributes(false);
        if (attrs.Length==0) {return;}

        // Display the custom attributes applied to this member.
        Display(indent+1, "Attributes:");
        foreach ( object o in attrs )
        {
            Display(indent+2, "{0}", o.ToString());
        }
    }

    // Display a formatted string indented by the specified amount.
    public static void Display(Int32 indent, string format, params object[] param)

    {
        Console.Write(new string(' ', indent*2));
        Console.WriteLine(format, param);
    }
}

//The output shown below is abbreviated.
//
//Assembly identity=ReflectionCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
//  Codebase=file:///C:/Documents and Settings/test/My Documents/Visual Studio 2005/Projects/Reflection/Reflection/obj/Debug/Reflection.exe
//Referenced assemblies:
//  Name=mscorlib, Version=2.0.0.0, Culture=, PublicKey token=B7-7A-5C-56-19-34-E0-89
//
//Assembly: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//  Module: mscorlib.dll
//
//  Type: System.Object
//    Member: GetType
//    Member: ToString
//    Member: Equals
//      Parameter: Type=System.Object, Name=obj
//    Member: Equals
//      Parameter: Type=System.Object, Name=objA
//      Parameter: Type=System.Object, Name=objB
//    Member: ReferenceEquals
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=System.Object, Name=objA
//      Parameter: Type=System.Object, Name=objB
//    Member: GetHashCode
//    Member: .ctor
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//
//  Type: System.ICloneable
//    Member: Clone
//
//  Type: System.Collections.IEnumerable
//    Member: GetEnumerator
//      Attributes:
//        System.Runtime.InteropServices.DispIdAttribute
//
//  Type: System.Collections.ICollection
//    Member: CopyTo
//      Parameter: Type=System.Array, Name=array
//      Parameter: Type=System.Int32, Name=index
//    Member: get_Count
//    Member: get_SyncRoot
//    Member: get_IsSynchronized
//    Member: Count
//      Accessor method: Int32 get_Count()
//    Member: SyncRoot
//      Accessor method: System.Object get_SyncRoot()
//    Member: IsSynchronized
//      Accessor method: Boolean get_IsSynchronized()
//
//  Type: System.Collections.IList
//    Member: get_Item
//      Parameter: Type=System.Int32, Name=index
//    Member: set_Item
//      Parameter: Type=System.Int32, Name=index
//      Parameter: Type=System.Object, Name=value
//    Member: Add
//      Parameter: Type=System.Object, Name=value
//    Member: Contains
//      Parameter: Type=System.Object, Name=value
//    Member: Clear
//    Member: get_IsReadOnly
//    Member: get_IsFixedSize
//    Member: IndexOf
//      Parameter: Type=System.Object, Name=value
//    Member: Insert
//      Parameter: Type=System.Int32, Name=index
//      Parameter: Type=System.Object, Name=value
//    Member: Remove
//      Parameter: Type=System.Object, Name=value
//    Member: RemoveAt
//      Parameter: Type=System.Int32, Name=index
//    Member: Item
//      Accessor method: System.Object get_Item(Int32)
//      Accessor method: Void set_Item(Int32, System.Object)
//    Member: IsReadOnly
//      Accessor method: Boolean get_IsReadOnly()
//    Member: IsFixedSize
//      Accessor method: Boolean get_IsFixedSize()
//
//  Type: System.Array
//    Member: IndexOf
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//    Member: AsReadOnly
//      Parameter: Type=T[], Name=array
//    Member: Resize
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[]&, Name=array
//      Parameter: Type=System.Int32, Name=newSize
//    Member: BinarySearch
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//    Member: BinarySearch
//      Attributes:
//        System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
//      Parameter: Type=T[], Name=array
//      Parameter: Type=T, Name=value
//      Parameter: Type=System.Collections.Generic.IComparer`1[T], Name=comparer

Commenti

L'oggetto AssemblyName contiene informazioni su un assembly, che è possibile utilizzare per l'associazione a tale assembly. L'identità di un assembly è costituita dai seguenti elementi:

  • Nome semplice.

  • Numero di versione.

  • Coppia di chiavi crittografiche.

  • Impostazioni cultura supportate.

Il nome semplice è in genere il nome file per il file manifesto senza estensione. La coppia di chiavi include una chiave pubblica e privata, usata per creare firme con nome sicuro per gli assembly.

Tutti i compilatori che supportano Common Language Runtime generano il nome semplice di una classe annidata e la reflection costruisce un nome mangled quando viene eseguita una query, in base alle convenzioni seguenti.

Delimitatore Significato
Barra rovesciata (\) Carattere di escape.
Virgola (,) Precede il nome dell'assembly.
Segno più (+) Precede una classe nidificata.

Ad esempio, il nome completo per una classe potrebbe essere simile al seguente:

ContainingClass+NestedClass,MyAssembly

"++" diventa "\+\+" e "\" diventa "\\".

Questo nome completo può essere salvato in modo permanente e usato in seguito per caricare l'oggetto Type. Per cercare e caricare un Typeoggetto , usare GetType solo con il nome del tipo o con il nome del tipo completo dell'assembly. GetType con il nome del tipo cercherà Type solo nell'assembly del chiamante e quindi nell'assembly di sistema. GetType con il nome di tipo completo dell'assembly Type cercherà in qualsiasi assembly.

Un oggetto completamente specificato AssemblyName deve avere il nome, le impostazioni cultura, la chiave pubblica o il token di chiave pubblica, la versione principale, la versione secondaria, il numero di build e i parametri del numero di revisione. Gli ultimi quattro vengono inseriti nel pacchetto nel Version tipo .

Per creare un nome semplice, creare un AssemblyName oggetto usando il costruttore senza parametri e impostare .Name Le altre proprietà sono facoltative.

Per creare un nome sicuro completo, creare un AssemblyName oggetto usando il costruttore senza parametri e impostare Name e KeyPair. Le altre proprietà sono facoltative. Usare SetPublicKey e SetPublicKeyToken per impostare la chiave pubblica e il nome sicuro. La firma con nome sicuro usa sempre l'algoritmo SHA1 hash.

Per assicurarsi che i nomi vengano costruiti correttamente, usare le proprietà seguenti:

È anche possibile ottenere il nome usando l'opzione /l con il Gacutil.exe (strumento Global Assembly Cache)

Per un nome sicuro parzialmente specificato, creare un AssemblyName oggetto usando il costruttore senza parametri e impostare il nome e la chiave pubblica. Un assembly creato usando tale AssemblyName oggetto può essere firmato in un secondo momento usando assembly Linker (Al.exe).

È possibile specificare una chiave pubblica e un KeyPair oggetto con valori incoerenti. Ciò può essere utile negli scenari di sviluppo. In questo caso, la chiave pubblica recuperata con GetPublicKey specifica la chiave pubblica corretta, mentre KeyPair specifica le chiavi pubbliche e private usate durante lo sviluppo. Quando il runtime rileva una mancata corrispondenza tra e KeyPair la chiave pubblica, cerca nel Registro di sistema la chiave corretta corrispondente alla chiave pubblica.

Il formato del nome visualizzato di un AssemblyName oggetto è una stringa Unicode delimitata da virgole che inizia con il nome, come indicato di seguito:

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

Name è il nome testuale dell'assembly. CultureInfo è le impostazioni cultura definite dal formato RFC1766. Major, Minor, Builde Revision sono la versione principale, la versione secondaria, il numero di build e il numero di revisione dell'assembly. StrongName è i 64 bit con codifica esadecimale del valore hash della chiave pubblica generata usando l'algoritmo hash SHA-1 e la chiave pubblica specificata da SetPublicKey. PublicKeyToken è la chiave pubblica con codifica esadecimale specificata da SetPublicKey.

La codifica esadecimale è definita come conversione di ogni byte di un oggetto binario in due caratteri esadecimali, passando da un byte minimo a un byte più significativo. I valori di visualizzazione aggiuntivi verranno aggiunti in base alle esigenze.

Se la chiave pubblica completa è nota, PublicKey può essere sostituita da StrongName.

Si noti anche che, ad eccezione Namedi , che deve venire per primo, l'ordine lessicale dei parametri non è importante. Tuttavia, qualsiasi parametro (Version, CultureStrongName o PublicKey) non impostato in modo specifico viene considerato omesso e viene AssemblyName quindi considerato parziale. Quando si specificano informazioni parziali, i parametri Name devono essere specificati nell'ordine descritto in precedenza.

Quando si specifica un nome visualizzato, la convenzione StrongName =null o PublicKey= null indica che è necessaria l'associazione e la corrispondenza con un assembly semplicemente denominato. Inoltre, la convenzione Culture= "" (virgolette doppie che rappresentano una stringa vuota) indica la corrispondenza rispetto alle impostazioni cultura predefinite.

Nell'esempio seguente viene illustrato un AssemblyName oggetto per un assembly denominato semplicemente con impostazioni cultura predefinite.

ExampleAssembly, Culture=""

L'esempio seguente illustra un riferimento completo per un assembly con nome sicuro nelle impostazioni cultura "en" (inglese).

ExampleAssembly, Version=1.0.0.0, Culture=en, PublicKeyToken=a5d015c7d5a0b012

Costruttori

AssemblyName()

Inizializza una nuova istanza della classe AssemblyName.

AssemblyName(String)

Inizializza una nuova istanza della classe AssemblyName con il nome visualizzato specificato.

Proprietà

CodeBase
Obsoleti.

Ottiene o imposta il percorso dell'assembly come URL.

ContentType

Ottiene o imposta un valore che indica il tipo di contenuto dell'assembly.

CultureInfo

Ottiene o imposta le impostazioni cultura supportate dall'assembly.

CultureName

Ottiene o imposta il nome delle impostazioni di cultura associate all'assembly.

EscapedCodeBase
Obsoleti.

Ottiene l'URI, inclusi i caratteri di escape, che rappresenta la codebase.

Flags

Ottiene o imposta gli attributi dell'assembly.

FullName

Ottiene il nome completo dell'assembly o nome di visualizzazione.

HashAlgorithm
Obsoleti.

Ottiene o imposta l'algoritmo hash utilizzato dal manifesto assembly.

KeyPair
Obsoleti.

Ottiene o imposta la coppia di chiavi crittografiche pubblica e privata che viene utilizzata per creare la firma del nome sicuro per l'assembly.

Name

Ottiene o imposta il nome semplice dell'assembly. Tale nome corrisponde in genere, ma non necessariamente, al nome del file manifesto dell'assembly, meno l'estensione.

ProcessorArchitecture
Obsoleti.

Ottiene o imposta un valore che identifica il processore e i bit per parola della piattaforma di destinazione di un file eseguibile.

Version

Ottiene o imposta il numero principale, secondario, di build e di revisione dell'assembly.

VersionCompatibility
Obsoleti.

Ottiene o imposta le informazioni relative alla compatibilità dell'assembly con altri assembly.

Metodi

Clone()

Esegue una copia di questo oggetto AssemblyName.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetAssemblyName(String)

Ottiene l'oggetto AssemblyName per un dato file.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)
Obsoleti.

Ottiene le informazioni di serializzazione con tutti i dati necessari per creare una nuova istanza di AssemblyName.

GetPublicKey()

Ottiene la chiave pubblica dell'assembly.

GetPublicKeyToken()

Ottiene il token di chiave pubblica, rappresentato dagli ultimi 8 byte dell'algoritmo hash SHA-1 della chiave pubblica in cui viene eseguita la firma dell'applicazione o dell'assembly.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnDeserialization(Object)

Implementa l'interfaccia ISerializable e viene richiamato dall'evento di deserializzazione al termine della deserializzazione.

ReferenceMatchesDefinition(AssemblyName, AssemblyName)

Restituisce un valore che indica se due nomi di assembly sono uguali. Il confronto è basato sui nomi di assembly semplici.

SetPublicKey(Byte[])

Imposta la chiave pubblica che identifica l'assembly.

SetPublicKeyToken(Byte[])

Imposta il token di chiave pubblica, rappresentato dagli ultimi 8 byte dell'algoritmo hash SHA-1 della chiave pubblica in cui viene eseguita la firma dell'applicazione o dell'assembly.

ToString()

Restituisce il nome completo dell'assembly, noto anche come nome visualizzato.

Implementazioni dell'interfaccia esplicita

_AssemblyName.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

_AssemblyName.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto che può quindi essere usato per ottenere informazioni sul tipo relative a un'interfaccia.

_AssemblyName.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

_AssemblyName.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Vedi anche