Прочитать на английском

Поделиться через


AppDomain.CreateInstanceAndUnwrap Метод

Определение

Создает новый экземпляр указанного типа.

Перегрузки

CreateInstanceAndUnwrap(String, String)

Создает новый экземпляр указанного типа. Параметры указывают сборку, в которой определен тип, и имя типа.

CreateInstanceAndUnwrap(String, String, Object[])

Создает новый экземпляр указанного типа. Параметры указывают сборку, в которой определен тип, имя типа и массив атрибутов активации.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Создает новый экземпляр указанного типа, определенного в указанной сборке, указывая, игнорируется ли регистр имени типа; атрибуты привязки и привязка, которые используются для выбора создаваемого типа; аргументы конструктора; язык и региональные параметры; и атрибуты активации.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Устаревшие..

Создает новый экземпляр указанного типа. Параметры указывают имя типа и способ его обнаружения и создания.

CreateInstanceAndUnwrap(String, String)

Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs

Создает новый экземпляр указанного типа. Параметры указывают сборку, в которой определен тип, и имя типа.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName);

Параметры

assemblyName
String

Отображаемое имя сборки. См. FullName.

typeName
String

Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName.

Возвращаемое значение

Экземпляр объекта, указанного typeName.

Исключения

assemblyName или typeNamenull.

Не найдено соответствующего общедоступного конструктора.

typeName не найден в assemblyName.

assemblyName не найден.

Вызывающий объект не имеет разрешения на вызов этого конструктора.

Операция выполняется в выгруженном домене приложения.

assemblyName не является допустимой сборкой для текущей загруженной среды выполнения.

Сборка или модуль была загружена дважды с двумя разными доказательствами.

Примеры

В следующем примере кода показан самый простой способ выполнения кода в другом домене приложения. В примере определяется класс с именем Worker, наследующий от MarshalByRefObject. Класс Worker определяет метод, отображающий имя домена приложения, в котором он выполняется. В примере создаются экземпляры Worker в домене приложения по умолчанию и в новом домене приложения.

Примечание

Сборка, содержащая Worker, должна быть загружена в оба домена приложения, но она может загружать другие сборки, которые существуют только в новом домене приложения.

using System;
using System.Reflection;

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

class CreateInstanceAndUnwrapSourceSnippet
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        CreateInstanceWorker localWorker = new CreateInstanceWorker();
        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");
        CreateInstanceWorker remoteWorker = (CreateInstanceWorker) ad.CreateInstanceAndUnwrap(
            typeof(CreateInstanceWorker).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"
 */

Комментарии

Это удобный метод, который объединяет CreateInstance и ObjectHandle.Unwrap. Этот метод вызывает конструктор без параметров для typeName.

Сведения о формате assemblyNameсм. в AssemblyName. См. свойство Type.FullName для формата typeName.

Примечание

При вызове метода M объекта типа T1, возвращаемого CreateInstanceAndUnwrap, и этот метод выполняет ранний вызов к методу объекта типа T2 в C сборки, отличной от текущей сборки или сборки, содержащей T1, сборка C загружается в текущий домен приложения. Эта загрузка возникает даже в том случае, если в тексте DynamicMethodбыл выполнен ранний вызов T1.M() или в другом динамически созданном коде. Если текущий домен является доменом по умолчанию, сборка C не может быть выгружена до завершения процесса. Если текущий домен позже пытается загрузить сборку C, загрузка может завершиться ошибкой.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstanceAndUnwrap(String, String, Object[])

Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs

Создает новый экземпляр указанного типа. Параметры указывают сборку, в которой определен тип, имя типа и массив атрибутов активации.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName, object?[]? activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, object[] activationAttributes);

Параметры

assemblyName
String

Отображаемое имя сборки. См. FullName.

typeName
String

Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName.

activationAttributes
Object[]

Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один объект UrlAttribute, указывающий URL-адрес, необходимый для активации удаленного объекта.

Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.

Возвращаемое значение

Экземпляр объекта, указанного typeName.

Исключения

assemblyName или typeNamenull.

Не найдено соответствующего общедоступного конструктора.

typeName не найден в assemblyName.

assemblyName не найден.

Вызывающий объект не имеет разрешения на вызов этого конструктора.

Вызывающий объект не может предоставлять атрибуты активации для объекта, который не наследуется от MarshalByRefObject.

Операция выполняется в выгруженном домене приложения.

assemblyName не является допустимой сборкой для текущей загруженной среды выполнения.

Сборка или модуль была загружена дважды с двумя разными доказательствами.

Примеры

using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.Remoting;

class ADDyno
{
   public static Type CreateADynamicAssembly(ref AppDomain myNewDomain,
                         string executableNameNoExe)
   {
    string executableName = executableNameNoExe + ".exe";

    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = executableNameNoExe;
    myAsmName.CodeBase = Environment.CurrentDirectory;

    AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    Console.WriteLine("-- Dynamic Assembly instantiated.");

    ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe,
                                      executableName);

    TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe,
                        TypeAttributes.Public,
                        typeof(MarshalByRefObject));

    MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles",
                        MethodAttributes.Public |
                        MethodAttributes.Static,
                        null,
                        new Type[] {  });

    MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod();
    MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string) });
    MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string), typeof(object), typeof(object) });
    MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles",
                new Type[] { typeof(string) });

    myFCMethod.InitLocals = true;

    ILGenerator myFCIL = myFCMethod.GetILGenerator();

    Console.WriteLine("-- Generating MSIL method body...");
    LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int));
    LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[]));

    Label evalForEachLabel = myFCIL.DefineLabel();
    Label topOfForEachLabel = myFCIL.DefineLabel();

    // Build the method body.

    myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v0);
    myFCIL.Emit(OpCodes.Ldc_I4_0);
    myFCIL.Emit(OpCodes.Stloc_S, v1);
    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, getFilesMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v3);

    myFCIL.Emit(OpCodes.Br_S, evalForEachLabel);

    // foreach loop starts here.
    myFCIL.MarkLabel(topOfForEachLabel);
    
        // Load array of strings and index, store value at index for output.
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldelem_Ref);
    myFCIL.Emit(OpCodes.Stloc_S, v2);

    myFCIL.Emit(OpCodes.Ldloc_S, v2);
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);

    // Increment counter by one.
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldc_I4_1);
    myFCIL.Emit(OpCodes.Add);
    myFCIL.Emit(OpCodes.Stloc_S, v1);

    // Determine if end of file list array has been reached.
    myFCIL.MarkLabel(evalForEachLabel);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldlen);
    myFCIL.Emit(OpCodes.Conv_I4);
    myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel);
    //foreach loop end here.

    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.");
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Box, typeof(int));
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null);

    myFCIL.Emit(OpCodes.Ret);

    Type myType = myTypeBuilder.CreateType();

    myAsmBuilder.SetEntryPoint(myFCMethod);
    myAsmBuilder.Save(executableName);		
    Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.");

    return myType;
   }

   public static void Main()
   {

    string domainDir, executableName = null;
    
    Console.Write("Enter a name for the file counting assembly: ");
    string executableNameNoExe = Console.ReadLine();
    executableName = executableNameNoExe + ".exe";
    Console.WriteLine("---");

    domainDir = Environment.CurrentDirectory;

    AppDomain curDomain = Thread.GetDomain();	

    // Create a new AppDomain, with the current directory as the base.

    Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
    AppDomainSetup mySetupInfo = new AppDomainSetup();
    mySetupInfo.ApplicationBase = domainDir;
    mySetupInfo.ApplicationName = executableNameNoExe;
    mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain;

    AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe,
                    null, mySetupInfo);

    Console.WriteLine("Creating a new AppDomain '{0}'...",
                    executableNameNoExe);

    Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory);
    Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles);

    Console.WriteLine("---");
    Type myFCType = CreateADynamicAssembly(ref curDomain,
                     executableNameNoExe);

    Console.WriteLine("Loading '{0}' from '{1}'...", executableName,
              myDomain.BaseDirectory.ToString());

    BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance |
                   BindingFlags.Instance);

    Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe,
                executableNameNoExe, false, bFlags,
                null, null, null, null, null);

    Console.WriteLine("Executing method 'CountLocalFiles' in {0}...",
               myObjInstance.ToString());

    myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null,
                myObjInstance, new object[] { });
   }
}

Комментарии

Это удобный метод, который объединяет CreateInstance и ObjectHandle.Unwrap. Этот метод вызывает конструктор без параметров для typeName.

Сведения о формате assemblyNameсм. в AssemblyName. См. свойство Type.FullName для формата typeName.

Примечание

При вызове метода M объекта типа T1, возвращаемого CreateInstanceAndUnwrap, и этот метод выполняет ранний вызов к методу объекта типа T2 в C сборки, отличной от текущей сборки или сборки, содержащей T1, сборка C загружается в текущий домен приложения. Эта загрузка возникает даже в том случае, если в тексте DynamicMethodбыл выполнен ранний вызов T1.M() или в другом динамически созданном коде. Если текущий домен является доменом по умолчанию, сборка C не может быть выгружена до завершения процесса. Если текущий домен позже пытается загрузить сборку C, загрузка может завершиться ошибкой.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs
Исходный код:
AppDomain.cs

Создает новый экземпляр указанного типа, определенного в указанной сборке, указывая, игнорируется ли регистр имени типа; атрибуты привязки и привязка, которые используются для выбора создаваемого типа; аргументы конструктора; язык и региональные параметры; и атрибуты активации.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

Параметры

assemblyName
String

Отображаемое имя сборки. См. FullName.

typeName
String

Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName.

ignoreCase
Boolean

Логическое значение, указывающее, следует ли выполнять поиск с учетом регистра.

bindingAttr
BindingFlags

Сочетание нулевых или более битовых флагов, влияющих на поиск конструктора typeName. Если bindingAttr равно нулю, выполняется поиск с учетом регистра для общедоступных конструкторов.

binder
Binder

Объект, который включает привязку, приведение типов аргументов, вызов элементов и получение объектов MemberInfo с помощью отражения. Если binder имеет значение NULL, используется привязка по умолчанию.

args
Object[]

Аргументы, которые необходимо передать конструктору. Этот массив аргументов должен соответствовать числу, порядку и типу параметров вызываемого конструктора. Если конструктор без параметров предпочтителен, args должен быть пустым массивом или null.

culture
CultureInfo

Объект, зависящий от языка и региональных параметров, используемый для управления приведением типов. Если culturenull, используется CultureInfo для текущего потока.

activationAttributes
Object[]

Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один объект UrlAttribute. указывает URL-адрес, необходимый для активации удаленного объекта.

Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.

Возвращаемое значение

Экземпляр объекта, указанного typeName.

Исключения

assemblyName или typeNamenull.

Не найден соответствующий конструктор.

typeName не найден в assemblyName.

assemblyName не найден.

Вызывающий объект не имеет разрешения на вызов этого конструктора.

Вызывающий объект не может предоставлять атрибуты активации для объекта, который не наследуется от MarshalByRefObject.

Операция выполняется в выгруженном домене приложения.

assemblyName не является допустимой сборкой для текущей загруженной среды выполнения.

Сборка или модуль была загружена дважды с двумя разными доказательствами.

Примеры

В следующем примере показано использование параметра ignoreCase.

using System;
using System.Reflection;

class IgnoreCaseSnippet {

   static void Main() {
      InstantiateINT32(false);     // Failed!
      InstantiateINT32(true);      // OK!
   }

   static void InstantiateINT32(bool ignoreCase) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         object instance = currentDomain.CreateInstanceAndUnwrap(
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}

Комментарии

Это удобный метод, который объединяет CreateInstance и ObjectHandle.Unwrap.

Сведения о формате assemblyNameсм. в AssemblyName. См. свойство Type.FullName для формата typeName.

Примечание

При вызове метода M объекта типа T1, возвращаемого CreateInstanceAndUnwrap, и этот метод выполняет ранний вызов к методу объекта типа T2 в C сборки, отличной от текущей сборки или сборки, содержащей T1, сборка C загружается в текущий домен приложения. Эта загрузка возникает даже в том случае, если в тексте DynamicMethodбыл выполнен ранний вызов T1.M() или в другом динамически созданном коде. Если текущий домен является доменом по умолчанию, сборка C не может быть выгружена до завершения процесса. Если текущий домен позже пытается загрузить сборку C, загрузка может завершиться ошибкой.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

Внимание!

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Создает новый экземпляр указанного типа. Параметры указывают имя типа и способ его обнаружения и создания.

public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);

Параметры

assemblyName
String

Отображаемое имя сборки. См. FullName.

typeName
String

Полное имя запрошенного типа, включая пространство имен, но не сборку, как возвращается свойством FullName.

ignoreCase
Boolean

Логическое значение, указывающее, следует ли выполнять поиск с учетом регистра.

bindingAttr
BindingFlags

Сочетание нулевых или более битовых флагов, влияющих на поиск конструктора typeName. Если bindingAttr равно нулю, выполняется поиск с учетом регистра для общедоступных конструкторов.

binder
Binder

Объект, который включает привязку, приведение типов аргументов, вызов элементов и получение объектов MemberInfo с помощью отражения. Если binder имеет значение NULL, используется привязка по умолчанию.

args
Object[]

Аргументы, которые необходимо передать конструктору. Этот массив аргументов должен соответствовать числу, порядку и типу параметров вызываемого конструктора. Если конструктор без параметров предпочтителен, args должен быть пустым массивом или null.

culture
CultureInfo

Объект, зависящий от языка и региональных параметров, используемый для управления приведением типов. Если culturenull, используется CultureInfo для текущего потока.

activationAttributes
Object[]

Массив одного или нескольких атрибутов, которые могут участвовать в активации. Как правило, массив, содержащий один объект UrlAttribute, указывающий URL-адрес, необходимый для активации удаленного объекта.

Этот параметр связан с объектами, активированными клиентом. Активация клиента — это устаревшая технология, которая сохраняется для обратной совместимости, но не рекомендуется для новой разработки. Распределенные приложения должны использовать Windows Communication Foundation.

securityAttributes
Evidence

Сведения, используемые для авторизации создания typeName.

Возвращаемое значение

Экземпляр объекта, указанного typeName.

Атрибуты

Исключения

assemblyName или typeNamenull.

Не найден соответствующий конструктор.

typeName не найден в assemblyName.

assemblyName не найден.

Вызывающий объект не имеет разрешения на вызов этого конструктора.

Вызывающий объект не может предоставлять атрибуты активации для объекта, который не наследуется от MarshalByRefObject.

Операция выполняется в выгруженном домене приложения.

assemblyName не является допустимой сборкой для текущей загруженной среды выполнения.

Сборка или модуль была загружена дважды с двумя разными доказательствами.

Примеры

В следующем примере показано использование параметра ignoreCase.

using System;
using System.Reflection;

class IgnoreCaseSnippet {

   static void Main() {
      InstantiateINT32(false);     // Failed!
      InstantiateINT32(true);      // OK!
   }

   static void InstantiateINT32(bool ignoreCase) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         object instance = currentDomain.CreateInstanceAndUnwrap(
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}

Комментарии

Это удобный метод, который объединяет CreateInstance и ObjectHandle.Unwrap.

Сведения о формате assemblyNameсм. в AssemblyName. См. свойство Type.FullName для формата typeName.

Примечание

При вызове метода M объекта типа T1, возвращаемого CreateInstanceAndUnwrap, и этот метод выполняет ранний вызов к методу объекта типа T2 в C сборки, отличной от текущей сборки или сборки, содержащей T1, сборка C загружается в текущий домен приложения. Эта загрузка возникает даже в том случае, если в тексте DynamicMethodбыл выполнен ранний вызов T1.M() или в другом динамически созданном коде. Если текущий домен является доменом по умолчанию, сборка C не может быть выгружена до завершения процесса. Если текущий домен позже пытается загрузить сборку C, загрузка может завершиться ошибкой.

См. также раздел

Применяется к

.NET Framework 4.8.1 и другие версии
Продукт Версии (Устарело)
.NET Framework 1.1, 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)