Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Событие AppDomain.AssemblyResolve

 

Опубликовано: Октябрь 2016

Происходит, когда разрешение сборки завершается неудачей.

Пространство имен:   System
Сборка:  mscorlib (в mscorlib.dll)

public event ResolveEventHandler AssemblyResolve

Реализует

_AppDomain.AssemblyResolve

Он отвечает ResolveEventHandler для этого события возврат сборки, который задается параметром ResolveEventArgs.Name свойства, или возвращает значение null, если сборка не распознан. Сборка должна быть загружена в контекст выполнения; Если он загружается в контекст только для отражения, загрузка, вызвавшая данное событие, создаваемое завершается ошибкой.

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

Начиная с версии .NET Framework 4, ResolveEventArgs.RequestingAssembly свойство возвращает сборку, запросившего загрузку сборки, которую не удалось разрешить. Например загрузчик может быть не удалось загрузить зависимость запрашивающей сборки, так как запрашивающей сборки и ее зависимости не находятся в путь поиска сборок. Знание идентификатора запрашивающей сборки может оказаться полезным при поиске зависимости или определить правильную версию, если доступно более одной версии зависимости. Для получения дополнительной информации см. ResolveEventArgs.RequestingAssembly.

System_CAPS_importantВажно

Начиная с версии .NET Framework 4, ResolveEventHandler событие вызывается для всех сборок, включая сборки ресурсов. В более ранних версиях событие не возникло сборок ресурсов. Если локализованные операционной системы, обработчик может вызываться несколько раз: один раз для каждого языка и региональных параметров в цепи перехода.

Для этого события ResolveEventArgs.Name свойство возвращает имя сборки, перед применением политики.

System_CAPS_importantВажно

Если зарегистрировано несколько обработчиков событий для данного события, handlersarecalled события в порядке, пока обработчик события возвращает значение, не null. Последующие обработчики учитываются.

Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.

В следующем образце показано AssemblyResolve событий.

Для этого примера кода необходимо указать полное имя сборки. Сведения о том, как получить полное имя сборки см. в разделе Имена сборок.

public class MyType
{
    public MyType()
    {
        Console.WriteLine();
        Console.WriteLine("MyType instantiated!");
    }
}

class Test
{
    public static void Main()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;

        // This call will fail to create an instance of MyType since the
        // assembly resolver is not set
        InstantiateMyTypeFail(currentDomain);

        currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

        // This call will succeed in creating an instance of MyType since the
        // assembly resolver is now set.
        InstantiateMyTypeFail(currentDomain);

        // This call will succeed in creating an instance of MyType since the
        // assembly name is valid.
        InstantiateMyTypeSucceed(currentDomain);
    }

    private static void InstantiateMyTypeFail(AppDomain domain)
    {
        // Calling InstantiateMyType will always fail since the assembly info
        // given to CreateInstance is invalid.
        try
        {
            // You must supply a valid fully qualified assembly name here.
            domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static void InstantiateMyTypeSucceed(AppDomain domain)
    {
        try
        {
            string asmname = Assembly.GetCallingAssembly().FullName;
            domain.CreateInstance(asmname, "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        Console.WriteLine("Resolving...");
        return typeof(MyType).Assembly;
    }
}

SecurityCriticalAttribute

Requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
Доступно с 1.1
Silverlight
Доступно с 2.0
Вернуться в начало
Показ: