Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

AppDomain.AssemblyResolve-Ereignis

 

Veröffentlicht: Oktober 2016

Tritt ein, wenn die Auflösung einer Assembly fehlschlägt.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public event ResolveEventHandler AssemblyResolve

Es liegt in der Verantwortung des der ResolveEventHandler für dieses Ereignis, um die Assembly zurück, die von angegeben wird die ResolveEventArgs.Name Eigenschaft oder null zurück, wenn die Assembly nicht erkannt wird. Die Assembly muss in einem Ausführungskontext geladen werden; Wenn sie in den reflektionsbezogenen Kontext geladen wurde, schlägt fehl, die Last, die dieses Ereignis ausgelöst werden soll, verursacht hat.

Anleitungen zur Verwendung dieses Ereignisses finden Sie unter Auflösen beim Laden von Assemblys.

Beginnend mit der .NET Framework 4die ResolveEventArgs.RequestingAssembly Eigenschaft gibt die Assembly, die das Laden der Assembly angefordert, die nicht aufgelöst werden konnte. Beispielsweise kann das Ladeprogramm möglicherweise nicht um eine Abhängigkeit von der anfordernden Assembly geladen werden, weil die anfordernde Assembly und die dazugehörige Abhängigkeit nicht in der Überprüfungspfad enthalten sind. Die Identität der anfordernden Assembly zu kennen möglicherweise nützlich, in Abhängigkeit der suchen oder um zu identifizieren, die richtige Version sein, wenn mehr als eine Version der Abhängigkeit verfügbar ist. Weitere Informationen finden Sie unter ResolveEventArgs.RequestingAssembly.

System_CAPS_importantWichtig

Beginnend mit der .NET Framework 4die ResolveEventHandler Ereignis wird für alle Assemblys, einschließlich Ressourcenassemblys. In früheren Versionen wurde das Ereignis nicht für Ressourcenassemblys ausgelöst. Wenn das Betriebssystem lokalisiert wird, der Handler kann mehrfach aufgerufen werden: einmal für jede Kultur in der Kette fallback.

Bei diesem Ereignis die ResolveEventArgs.Name Eigenschaft gibt den Assemblynamen aus, bevor die Richtlinie angewendet wird.

System_CAPS_importantWichtig

Wenn mehr als ein Ereignishandler für dieses Ereignis registriert ist, die Handlersarecalled Ereignis in der Reihenfolge, bis ein Ereignishandler einen Wert zurückgibt, die nicht null. Nachfolgende Ereignishandler werden ignoriert.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter Behandeln und Auslösen von Ereignissen.

Das folgende Beispiel zeigt die AssemblyResolve Ereignis.

Für dieses Codebeispiel ausführen müssen Sie den vollqualifizierten Assemblynamen bereitstellen. Informationen zur Vorgehensweise zum Abrufen der vollqualifizierte Assemblyname finden Sie unter Assemblynamen.

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
Verfügbar seit 1.1
Silverlight
Verfügbar seit 2.0
Zurück zum Anfang
Anzeigen: