System.Reflection (Espacio ...


Biblioteca de clases de .NET Framework
Assembly (Clase)

Actualización: noviembre 2007

Representa un ensamblado, que es un bloque de creación reutilizable, versionable y autodescriptivo de una aplicación de Common Language Runtime.

Espacio de nombres:  System.Reflection
Ensamblado:  mscorlib (en mscorlib.dll)
Sintaxis

Visual Basic (Declaración)
<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
<ComVisibleAttribute(True)> _
Public Class Assembly _
    Implements _Assembly, IEvidenceFactory, ICustomAttributeProvider, ISerializable
Visual Basic (Uso)
Dim instance As [Assembly]
C#
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public class Assembly : _Assembly, IEvidenceFactory, 
    ICustomAttributeProvider, ISerializable
Visual C++
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
[ComVisibleAttribute(true)]
public ref class Assembly : _Assembly, 
    IEvidenceFactory, ICustomAttributeProvider, ISerializable
J#
/** @attribute SerializableAttribute */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
/** @attribute ComVisibleAttribute(true) */
public class Assembly implements _Assembly, 
    IEvidenceFactory, ICustomAttributeProvider, ISerializable
JScript
public class Assembly implements _Assembly, IEvidenceFactory, ICustomAttributeProvider, ISerializable
Comentarios

Utilice la clase Assembly para cargar los ensamblados, explorar los metadatos y las partes constituyentes de los ensamblados, detectar los tipos incluidos en los ensamblados y crear instancias de esos tipos.

Para obtener una matriz de objetos Assembly que represente los ensamblados que actualmente están cargados en un dominio de aplicación (por ejemplo, el dominio de aplicación predeterminado de un proyecto simple), utilice el método AppDomain..::.GetAssemblies.

Para cargar ensamblados dinámicamente, la clase Assembly proporciona los métodos estáticos siguientes (métodos Shared en Visual Basic). Los ensamblados se cargan en el dominio de aplicación en que se produce la operación de carga.

  • Se recomienda cargar los ensamblados utilizando el método Load, que identifica el ensamblado que se va a cargar mediante su nombre para mostrar (por ejemplo, "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"). La búsqueda del ensamblado se rige por las normas descritas en Cómo el motor en tiempo de ejecución ubica ensamblados.

  • Los métodos ReflectionOnlyLoad y ReflectionOnlyLoadFrom permiten cargar un ensamblado para su reflexión, pero no para su ejecución. Por ejemplo, un ensamblado que tiene como destino una plataforma de 64 bits puede ser examinado por el código que se ejecuta en una plataforma de 32 bits.

  • Los métodos LoadFile y LoadFrom se proporcionan para aquellas situaciones poco habituales en que un ensamblado debe identificarse mediante una ruta de acceso.

Si desea obtener un objeto Assembly para el ensamblado que se encuentra actualmente en ejecución, utilice el método GetExecutingAssembly.

Muchos miembros de la clase Assembly proporcionan información sobre un ensamblado. Por ejemplo:

  • El método GetName devuelve un objeto AssemblyName que proporciona acceso a las partes del nombre para mostrar del ensamblado.

  • El método GetCustomAttributes muestra los atributos que se aplican al ensamblado.

  • El método GetFiles proporciona acceso a los archivos del manifiesto del ensamblado.

  • El método GetManifestResourceNames proporciona los nombres de los recursos del manifiesto del ensamblado.

El método GetTypes muestra todos los tipos del ensamblado. El método GetExportedTypes indica los tipos que los llamadores pueden ver desde fuera del ensamblado. El método GetType se puede utilizar para buscar un tipo determinado en el ensamblado. El método CreateInstance se puede utilizar para buscar y crear instancias de tipos en el ensamblado.

Para obtener más información sobre los ensamblados, vea Dominios de aplicación y ensamblados.

Ejemplos

En el ejemplo de código siguiente se muestra cómo se obtiene el ensamblado que se está ejecutando en la actualidad, cómo se crea una instancia de un tipo incluido en este ensamblado y cómo se llama a uno de los métodos del tipo con enlace en tiempo de ejecución. Para este fin, en el ejemplo de código se define una clase denominada Example con un método denominado SampleMethod. El constructor de la clase acepta un entero, que se utiliza para calcular el valor devuelto del método.

En el ejemplo de código también se muestra cómo se utiliza el método GetName para obtener un objeto AssemblyName que se puede utilizar para analizar el nombre completo del ensamblado. En el ejemplo se muestra el número de versión del ensamblado, la propiedad CodeBase y la propiedad EntryPoint.

Visual Basic
Imports System
Imports System.Reflection
Imports System.Security.Permissions

<assembly: AssemblyVersionAttribute("1.0.2000.0")>

Public Class Example
    Private factor As Integer

    Public Sub New(ByVal f As Integer) 
        factor = f
    End Sub 

    Public Function SampleMethod(ByVal x As Integer) As Integer 
        Console.WriteLine(vbCrLf & "Example.SampleMethod({0}) executes.", x)
        Return x * factor
    End Function 

    Public Shared Sub Main() 
        Dim assem As [Assembly] = [Assembly].GetExecutingAssembly()

        Console.WriteLine("Assembly Full Name:")
        Console.WriteLine(assem.FullName)

        ' The AssemblyName type can be used to parse the full name.
        Dim assemName As AssemblyName = assem.GetName()
        Console.WriteLine(vbLf + "Name: {0}", assemName.Name)
        Console.WriteLine("Version: {0}.{1}", assemName.Version.Major, _
            assemName.Version.Minor)

        Console.WriteLine(vbLf + "Assembly CodeBase:")
        Console.WriteLine(assem.CodeBase)

        ' Create an object from the assembly, passing in the correct number
        ' and type of arguments for the constructor.
        Dim o As Object = assem.CreateInstance("Example", False, _
            BindingFlags.ExactBinding, Nothing, _
            New Object() { 2 }, Nothing, Nothing)

        ' Make a late-bound call to an instance method of the object.    
        Dim m As MethodInfo = assem.GetType("Example").GetMethod("SampleMethod")
        Dim ret As Object = m.Invoke(o, New Object() { 42 })
        Console.WriteLine("SampleMethod returned {0}.", ret)

        Console.WriteLine(vbCrLf & "Assembly entry point:")
        Console.WriteLine(assem.EntryPoint)

    End Sub 
End Class 

' This code example produces output similar to the following:
'
'Assembly Full Name:
'source, Version=1.0.2000.0, Culture=neutral, PublicKeyToken=null
'
'Name: source
'Version: 1.0
'
'Assembly CodeBase:
'file:///C:/sdtree/AssemblyClass/vb/source.exe
'
'Example.SampleMethod(42) executes.
'SampleMethod returned 84.
'
'Assembly entry point:
'Void Main()
' 
C#
using System;
using System.Reflection;
using System.Security.Permissions;

[assembly:AssemblyVersionAttribute("1.0.2000.0")]

public class Example
{
    private int factor;
    public Example(int f)
    {
        factor = f;
    }

    public int SampleMethod(int x) 
    { 
        Console.WriteLine("\nExample.SampleMethod({0}) executes.", x);
        return x * factor;
    }

    public static void Main()
    {
        Assembly assem = Assembly.GetExecutingAssembly();

        Console.WriteLine("Assembly Full Name:");
        Console.WriteLine(assem.FullName);

        // The AssemblyName type can be used to parse the full name.
        AssemblyName assemName = assem.GetName();
        Console.WriteLine("\nName: {0}", assemName.Name);
        Console.WriteLine("Version: {0}.{1}", 
            assemName.Version.Major, assemName.Version.Minor);

        Console.WriteLine("\nAssembly CodeBase:");
        Console.WriteLine(assem.CodeBase);

        // Create an object from the assembly, passing in the correct number
        // and type of arguments for the constructor.
        Object o = assem.CreateInstance("Example", false, 
            BindingFlags.ExactBinding, 
            null, new Object[] { 2 }, null, null);

        // Make a late-bound call to an instance method of the object.    
        MethodInfo m = assem.GetType("Example").GetMethod("SampleMethod");
        Object ret = m.Invoke(o, new Object[] { 42 });
        Console.WriteLine("SampleMethod returned {0}.", ret);

        Console.WriteLine("\nAssembly entry point:");
        Console.WriteLine(assem.EntryPoint);
    }
}

/* This code example produces output similar to the following:

Assembly Full Name:
source, Version=1.0.2000.0, Culture=neutral, PublicKeyToken=null

Name: source
Version: 1.0

Assembly CodeBase:
file:///C:/sdtree/AssemblyClass/cs/source.exe

Example.SampleMethod(42) executes.
SampleMethod returned 84.

Assembly entry point:
Void Main()
 */
Visual C++
using namespace System;
using namespace System::Reflection;
using namespace System::Security::Permissions;

[assembly:AssemblyVersionAttribute("1.0.2000.0")];

public ref class Example
{
private: 
    int factor;

public:
    Example(int f)
    {
        factor = f;
    }

    int SampleMethod(int x) 
    { 
        Console::WriteLine("\nExample->SampleMethod({0}) executes.", x);
        return x * factor;
    }
};

void main()
{
    Assembly^ assem = Assembly::GetExecutingAssembly();

    Console::WriteLine("Assembly Full Name:");
    Console::WriteLine(assem->FullName);

    // The AssemblyName type can be used to parse the full name.
    AssemblyName^ assemName = assem->GetName();
    Console::WriteLine("\nName: {0}", assemName->Name);
    Console::WriteLine("Version: {0}.{1}", 
        assemName->Version->Major, assemName->Version->Minor);

    Console::WriteLine("\nAssembly CodeBase:");
    Console::WriteLine(assem->CodeBase);

    // Create an object from the assembly, passing in the correct number and
    // type of arguments for the constructor.
    Object^ o = assem->CreateInstance("Example", false, 
        BindingFlags::ExactBinding, 
        nullptr, gcnew array<Object^> { 2 }, nullptr, nullptr);

    // Make a late-bound call to an instance method of the object.    
    MethodInfo^ m = assem->GetType("Example")->GetMethod("SampleMethod");
    Object^ ret = m->Invoke(o, gcnew array<Object^> { 42 });
    Console::WriteLine("SampleMethod returned {0}.", ret);

    Console::WriteLine("\nAssembly entry point:");
    Console::WriteLine(assem->EntryPoint);
}

/* This code example produces output similar to the following:

Assembly Full Name:
source, Version=1.0.2000.0, Culture=neutral, PublicKeyToken=null

Name: source
Version: 1.0

Assembly CodeBase:
file:///C:/sdtree/AssemblyClass/cpp/source.exe

Example->SampleMethod(42) executes.
SampleMethod returned 84.

Assembly entry point:
UInt32 _mainCRTStartup()
 */
Jerarquía de herencia

System..::.Object
  System.Reflection..::.Assembly
    System.Reflection.Emit..::.AssemblyBuilder
Seguridad para subprocesos

Este tipo es seguro para la ejecución de subprocesos.

Plataformas

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Información de versión

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Vea también

Referencia

Otros recursos

Etiquetas :


Page view tracker