AssemblyName Classe

Definição

Descreve a identidade exclusiva de um assembly 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 em um assembly.

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()
'

Comentários

O AssemblyName objeto contém informações sobre um assembly, que você pode usar para vincular a esse assembly. A identidade de um assembly consiste no seguinte:

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

O nome simples normalmente é o nome do arquivo de manifesto sem sua extensão. O par de chaves inclui uma chave pública e privada, usada para criar assinaturas de nome forte para assemblies.

Todos os compiladores que dão suporte ao common language runtime emitirão o nome simples de uma classe aninhada e a reflexão construirá um nome mutilado quando consultado, de acordo com as convenções a seguir.

Delimitador Meaning
Barra invertida (\) Caractere de escape.
Vírgula (,) Precede o nome do assembly.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado para uma classe pode ter esta aparência:

ContainingClass+NestedClass,MyAssembly

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

Esse nome qualificado pode ser persistido e usado posteriormente para carregar o Type. Para pesquisar e carregar um Type, use GetType apenas com o nome do tipo ou com o nome de tipo qualificado do assembly. GetType com o nome do tipo só procurará o Type assembly do chamador e, em seguida, no assembly do Sistema. GetType com o nome de tipo qualificado do assembly procurará em Type qualquer assembly.

Um totalmente especificado AssemblyName deve ter o nome, a cultura, a chave pública ou o token de chave pública, a versão principal, a versão secundária, o número de build e os parâmetros de número de revisão. Os quatro últimos são empacotados no 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 o Name e KeyPair. As outras propriedades são opcionais. Use SetPublicKey e SetPublicKeyToken defina a chave pública e o nome forte. A assinatura de nome forte sempre usa o SHA1 algoritmo de hash.

Para garantir que os nomes sejam construídos corretamente, use as seguintes propriedades:

Você também pode obter o nome usando a opção /l com o Gacutil.exe (Ferramenta de Cache de Assembly Global).

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

É possível especificar uma chave pública e uma KeyPair com valores inconsistentes. Isso pode ser útil em cenários de desenvolvedor. Nesse caso, a chave pública recuperada especifica GetPublicKey a chave pública correta, enquanto especifica as chaves públicas e privadas usadas durante o KeyPair desenvolvimento. Quando o runtime detecta uma incompatibilidade entre a chave pública e a KeyPair chave pública, ele procura no Registro a chave correta que corresponde à chave pública.

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

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

Name é o nome textual do assembly. CultureInfo é a cultura definida por RFC1766 formato. Major, Minore BuildRevision são a versão principal, a versão secundária, o número de build e o número de revisão do assembly. StrongName é a ordem baixa codificada em hexadecimal de 64 bits do valor hash da chave pública gerada usando o algoritmo de hash 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 hexadecimal, progredindo de bytes mínimos para mais significativos. Valores de exibição adicionais serão adicionados conforme necessário.

Se a chave pública completa for conhecida, a PublicKey poderá ser substituída por StrongName.

Observe também que, exceto por Name, que deve vir primeiro, a ordem lexical dos parâmetros não é importante. No entanto, qualquer parâmetro (Versionou CultureStrongNamePublicKey ) não definido especificamente é considerado como omitido eAssemblyName, em seguida, é considerado parcial. Ao especificar informações parciais, os parâmetros name devem ser especificados na ordem descrita acima.

Ao fornecer um nome de exibição, a convenção StrongName =null ou PublicKey= null indica que a associação e a correspondência com um assembly simplesmente nomeado são necessárias. Além disso, a convenção Culture= "" (aspa dupla que representa uma cadeia de caracteres vazia) indica a correspondência com a cultura padrão.

O exemplo a seguir mostra um AssemblyName assembly simplesmente nomeado com cultura padrão.

ExampleAssembly, Culture=""

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

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

Construtores

Nome Description
AssemblyName()

Inicializa uma nova instância da classe AssemblyName.

AssemblyName(String)

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

Propriedades

Nome Description
CodeBase

Obtém ou define o local do assembly como uma URL.

ContentType

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

CultureInfo

Obtém ou define a cultura compatível com o assembly.

CultureName

Obtém ou define o nome da cultura associada ao assembly.

EscapedCodeBase

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

Flags

Obtém ou define os atributos do assembly.

FullName

Obtém o nome completo do assembly, também conhecido como o nome de exibição.

HashAlgorithm

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

KeyPair

Obtém ou define o par de chaves criptográficas públicas e privadas que é usado para criar uma assinatura de nome forte para o assembly.

Name

Obtém ou define o nome simples do assembly. Isso geralmente é, mas não necessariamente, o nome do arquivo de manifesto do assembly, menos sua extensão.

ProcessorArchitecture

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

Version

Obtém ou define os números principais, secundários, de build e de revisão do assembly.

VersionCompatibility

Obtém ou define as informações relacionadas à compatibilidade do assembly com outros assemblies.

Métodos

Nome Description
Clone()

Faz uma cópia desse AssemblyName objeto.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAssemblyName(String)

Obtém o AssemblyName arquivo para determinado arquivo.

GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

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

GetPublicKey()

Obtém a chave pública do assembly.

GetPublicKeyToken()

Obtém o token de chave pública, que são os últimos 8 bytes do hash SHA-1 da chave pública sob a qual o aplicativo ou assembly está assinado.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
OnDeserialization(Object)

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

ReferenceMatchesDefinition(AssemblyName, AssemblyName)

Retorna um valor que indica se dois nomes de assembly são os mesmos. A comparação é baseada nos nomes de assembly simples.

SetPublicKey(Byte[])

Define a chave pública que identifica o assembly.

SetPublicKeyToken(Byte[])

Define o token de chave pública, que é os últimos 8 bytes do hash SHA-1 da chave pública sob a qual o aplicativo ou assembly está assinado.

ToString()

Retorna o nome completo do assembly, também conhecido como o nome de exibição.

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

_AssemblyName.GetTypeInfo(UInt32, UInt32, IntPtr)

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

_AssemblyName.GetTypeInfoCount(UInt32)

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

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

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

Aplica-se a

Confira também