AssemblyName Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 |
| 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. |