AssemblyName Classe

Definição

Descreve a identidade única de uma assembleia na íntegra.

public ref class AssemblyName sealed
public ref class AssemblyName sealed : ICloneable, System::Runtime::InteropServices::_AssemblyName, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable
public ref class AssemblyName sealed : ICloneable, System::Runtime::Serialization::IDeserializationCallback, System::Runtime::Serialization::ISerializable
public sealed class AssemblyName
[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
[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
public sealed class AssemblyName : ICloneable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
type AssemblyName = class
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
type AssemblyName = class
    interface _AssemblyName
    interface ICloneable
    interface ISerializable
    interface IDeserializationCallback
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type AssemblyName = class
    interface _AssemblyName
    interface ICloneable
    interface ISerializable
    interface IDeserializationCallback
type AssemblyName = class
    interface ICloneable
    interface IDeserializationCallback
    interface ISerializable
Public NotInheritable Class AssemblyName
Public NotInheritable Class AssemblyName
Implements _AssemblyName, ICloneable, IDeserializationCallback, ISerializable
Public NotInheritable Class AssemblyName
Implements ICloneable, IDeserializationCallback, ISerializable
Herança
AssemblyName
Atributos
Implementações

Exemplos

Este exemplo mostra como usar várias classes de reflexão para analisar os metadados contidos numa assembleia.

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
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 = GetType(Module1).Assembly
        Display(indent, "Assembly identity={0}", a.FullName)
        Display(indent + 1, "Codebase={0}", a.CodeBase)

        ' Display the set of assemblies our assemblies reference.
        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()
'

Observações

O AssemblyName objeto contém informação sobre um conjunto, que pode usar para se ligar a esse conjunto. A identidade de uma assembleia consiste no seguinte:

  • Nome simples.
  • Número da versão.
  • Par de chaves criptográficas.
  • Cultura apoiada.

O nome simples é tipicamente o nome do ficheiro manifesto sem a sua extensão. O par de chaves inclui uma chave pública e uma privada, usada para criar assinaturas de nomes fortes para assemblies.

Todos os compiladores que suportam o runtime da linguagem comum emitirão o nome simples de uma classe aninhada, e a reflection constrói um nome distorcido quando consultada, de acordo com as seguintes convenções.

Delimitador Meaning
Barra inversa (\) Personagem de fuga.
Vírgula (,) Precede o nome da assembleia.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado de uma turma pode ser assim:

ContémClasse+ClasseAninhada, MyAssembly

Um "++" torna-se "\+\+", e um "\" torna-se "\\".

Este nome qualificado pode ser mantido e posteriormente usado para carregar o Type. Para procurar e carregar um Type, use GetType ou apenas com o nome do tipo ou com o nome qualificado da assembleia. GetType com apenas o nome do tipo, procurará o Type no conjunto do chamador e depois no conjunto do Sistema. GetType Com o nome do tipo qualificado da assembleia, procurará o Type em qualquer assembleia.

Uma versão totalmente especificada AssemblyName deve ter os parâmetros do nome, cultura, chave pública ou token de chave pública, versão principal, versão menor, número de compilação e número de revisão. Os últimos quatro são embalados neste Version tipo.

Para criar um nome simples, crie um AssemblyName objeto usando o construtor sem parâmetros e defina o Name. As outras propriedades são opcionais.

Para criar um nome forte completo, crie um AssemblyName objeto usando o construtor sem parâmetros e defina e NameKeyPair. As outras propriedades são opcionais. Use SetPublicKey e SetPublicKeyToken para definir a chave pública e o nome forte. A assinatura forte de nomes utiliza sempre o SHA1 algoritmo de hash.

Para garantir que os nomes são construídos corretamente, use as seguintes propriedades:

Também pode obter o nome usando a /l opção com a Gacutil.exe (Global Assembly Cache Tool).

Para um nome forte parcialmente especificado, crie-se um AssemblyName objeto usando o construtor sem parâmetros e defina o nome e a chave pública. Um assembly criado usando tal AssemblyName pode ser assinado posteriormente usando o Assembly Linker (Al.exe).

É possível especificar uma chave pública e uma KeyPair com valores inconsistentes. Isto pode ser útil em cenários de programadores. Neste caso, a chave pública recuperada GetPublicKey com especifica a chave pública correta, enquanto a KeyPair especifica as chaves pública e privada usadas durante o desenvolvimento. Quando o runtime deteta uma incompatibilidade entre a KeyPair e a chave pública, procura no registo a chave correta que corresponde à chave pública.

O formato do nome de exibição de um AssemblyName é uma cadeia Unicode delimitada por vírgulas que começa pelo nome, da seguinte forma:

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

Name é o nome textual da assembleia. CultureInfo é a cultura definida pelo formato RFC1766. Major, Minor, Build, e Revision são a versão principal, a versão menor, o número de compilação e o número da revisão da assembleia. StrongName é os 64 bits de baixa ordem codificados hexadecimal do valor de hash da chave pública gerados usando o algoritmo SHA-1 e a chave pública especificada por SetPublicKey. PublicKeyToken é a chave pública codificada em hexadecimal especificada por SetPublicKey.

A codificação hexadecimal é definida como a conversão de cada byte de um objeto binário em dois caracteres hexadecimais, progredindo do byte mínimo ao mais significativo. Serão adicionados valores adicionais de exibição conforme considerado necessário.

Se a chave pública completa for conhecida, então PublicKey pode ser substituída por StrongName.

Note-se também que, exceto por Name, que deve vir primeiro, a ordem lexical dos parâmetros não é importante. No entanto, qualquer parâmetro (Version, Culture, ou PublicKeyStrongName ) que não seja especificamente definido é considerado omitido, e o AssemblyName é então considerado parcial. Ao especificar informação parcial, os parâmetros do Nome devem ser especificados na ordem descrita acima.

Ao fornecer um nome de visualização, a convenção StrongName =null ou PublicKey= null indica que é necessária a ligação e correspondência com um conjunto simplesmente nomeado. Além disso, a convenção Culture= "" (aspas duplas representando uma cadeia vazia) indica correspondência com a cultura padrão.

O exemplo seguinte mostra um AssemblyName para uma assembly simplesmente nomeada com cultura padrão.

ExampleAssembly, Culture=""

O exemplo a seguir mostra uma referência totalmente especificada para um assembly com nome forte com a cultura "en".

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

Construtores

Name Description
AssemblyName()

Inicializa uma nova instância da AssemblyName classe.

AssemblyName(String)

Inicializa uma nova instância da AssemblyName classe com o nome de exibição especificado.

Propriedades

Name Description
CodeBase

Obtém ou define a localização do assembly como URL.

ContentType

Recebe ou define um valor que indica que tipo de conteúdo o conjunto contém.

CultureInfo

Obtém ou definem a cultura apoiada pela assembleia.

CultureName

Recebe ou define o nome da cultura associada à assembleia.

EscapedCodeBase

Obtém o URI, incluindo caracteres de escape, que representa a base de código.

Flags

Obtém ou define os atributos da assembleia.

FullName

Recebe o nome completo da assembleia, também conhecido como nome de visualização.

HashAlgorithm

Obtém ou define o algoritmo de hash usado pelo manifesto assembly.

KeyPair

Obtém ou define o par de chaves criptográficas pública e privada que é usado para criar uma assinatura forte de nome para a assembleia.

Name

Obtém ou define o nome simples da assembleia. Este é normalmente, mas não necessariamente, o nome do ficheiro manifesto da assembleia, excluindo a sua extensão.

ProcessorArchitecture

Obtém ou define um valor que identifica o processador e os bits por palavra da plataforma alvo de um executável.

Version

Obtém ou define os números de maior, menor, construção e revisão do montagem.

VersionCompatibility

Obtém ou define a informação relacionada com a compatibilidade do conjunto com outros conjuntos.

Métodos

Name Description
Clone()

Faz uma cópia deste AssemblyName objeto.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAssemblyName(String)

Recebe o AssemblyName para um determinado ficheiro.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Obtém informação de serialização com todos os dados necessários para recriar uma instância deste AssemblyName.

GetPublicKey()

Obtém a chave pública da assembleia.

GetPublicKeyToken()

Obtém o token da chave pública, que corresponde aos últimos 8 bytes do hash SHA-1 da chave pública sob a qual a aplicação ou assembly está assinada.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
OnDeserialization(Object)

Implementa a ISerializable interface e é chamada de volta pelo evento de desserialização quando a desserialização está concluída.

ReferenceMatchesDefinition(AssemblyName, AssemblyName)

Devolve um valor que indica se dois nomes de assembleia são iguais. A comparação baseia-se nos nomes simples das assembleias.

SetPublicKey(Byte[])

Define a chave pública que identifica a assembleia.

SetPublicKeyToken(Byte[])

Define o token da chave pública, que corresponde aos últimos 8 bytes do hash SHA-1 da chave pública sob a qual a aplicação ou assembly é assinada.

ToString()

Devolve o nome completo da assembleia, também conhecido como nome de visualização.

Implementações de Interface Explícita

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

_AssemblyName.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo para uma interface.

_AssemblyName.GetTypeInfoCount(UInt32)

Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).

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

Proporciona acesso a propriedades e métodos expostos por um objeto.

Aplica-se a

Ver também