Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método AppDomain.CreateInstanceAndUnwrap (String, String)

 

Publicado: noviembre de 2016

Crea una nueva instancia del tipo especificado. Los parámetros especifican el ensamblado en el que se definen el tipo y el nombre del tipo.

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

public object CreateInstanceAndUnwrap(
	string assemblyName,
	string typeName
)

Parámetros

assemblyName
Type: System.String

Nombre para mostrar del ensamblado. Vea Assembly.FullName.

typeName
Type: System.String

Nombre completo del tipo solicitado, incluido el espacio de nombres, pero no el ensamblado, tal y como lo devuelve la propiedad Type.FullName.

Valor devuelto

Type: System.Object

Instancia del objeto especificado por typeName.

Exception Condition
ArgumentNullException

El valor de assemblyName o typeName es null.

MissingMethodException

No se encontró ningún constructor público coincidente.

TypeLoadException

No se encontró typename en assemblyName.

FileNotFoundException

No se encontró assemblyName.

MethodAccessException

El llamador no tiene permiso para llamar a este constructor.

AppDomainUnloadedException

La operación se intenta en un dominio de aplicación descargado.

BadImageFormatException

assemblyName no es un ensamblado válido.

-o-

La versión 2.0 u otra posterior del Common Language Runtime está cargada actualmente y assemblyName se compiló con una versión posterior.

FileLoadException

Se cargó un ensamblado o módulo dos veces con dos evidencias diferentes.

Se trata de un método útil que combina CreateInstance y ObjectHandle.Unwrap. Este método llama al constructor predeterminado para typeName.

Vea AssemblyName para el formato de assemblyName. Consulte la Type.FullName propiedad de formato de typeName.

System_CAPS_noteNota

Si realiza una llamada enlazada a un método M de un objeto de tipo T1 que devolvió CreateInstanceAndUnwrap, y que el método realiza una llamada enlazada a un método de un objeto de tipo T2 en un ensamblado C que no sea el ensamblado actual o el ensamblado que contiene T1, ensamblado C se carga en el dominio de aplicación actual. Esta carga se produce incluso si el tiempo de compilación la llamada a T1.M() se realizó en el cuerpo de un DynamicMethod, o en otro código generado dinámicamente. Si el dominio actual es el dominio predeterminado, el ensamblado C no se puede descargar hasta que finaliza el proceso. Si más adelante, el dominio actual intenta cargar el ensamblado C, podría producirse un error en la carga.

En el ejemplo de código siguiente se muestra la manera más sencilla de ejecutar el código en otro dominio de aplicación. En el ejemplo se define una clase denominada Worker que hereda de MarshalByRefObject. La Worker clase define un método que muestra el nombre del dominio de aplicación en el que está ejecutando. El ejemplo crea instancias de Worker en el dominio de aplicación predeterminado y en un nuevo dominio de aplicación.

System_CAPS_noteNota

El ensamblado que contiene Worker se deben cargar en ambos dominios de aplicación, pero se pueden cargar otros ensamblados que solo existen en el nuevo dominio de aplicación.

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

FileIOPermissionAccess

for the ability to access the location of the assembly if code base is supplied by a configuration file. Associated enumeration: F:System.Security.Permissions.FileIOPermissionAccess.PathDiscovery

FileIOPermissionAccess

for the ability to read the file containing the assembly manifest, or if you are creating a type from a module other than the manifest file. Associated enumeration: F:System.Security.Permissions.FileIOPermissionAccess.Read

WebPermission

for the ability to access the location of the assembly if the assembly is not local.

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: