Auf Englisch lesen

Teilen über


Assembly.GetCallingAssembly Methode

Definition

Gibt die Assembly der Methode zurück, die die derzeit ausgeführte Methode aufgerufen hat.

C#
public static System.Reflection.Assembly GetCallingAssembly();

Gibt zurück

Das Assembly-Objekt der Methode, die die derzeit ausgeführte Methode aufgerufen hat.

Beispiele

Im folgenden Beispiel wird die aufrufende Assembly der aktuellen Methode abgerufen.

C#
// Assembly FirstAssembly
using System;
using System.Reflection;
using System.Runtime.CompilerServices;

namespace FirstAssembly
{
    public class InFirstAssembly
    {
        public static void Main()
        {
            FirstMethod();
            SecondAssembly.InSecondAssembly.OtherMethod();
        }

        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void FirstMethod()
        {
            Console.WriteLine("FirstMethod called from: " + Assembly.GetCallingAssembly().FullName);
        }
    }
}

// Assembly SecondAssembly
namespace SecondAssembly
{
    class InSecondAssembly
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void OtherMethod()
        {
            Console.WriteLine("OtherMethod executing assembly: " + Assembly.GetExecutingAssembly().FullName);
            Console.WriteLine("OtherMethod called from: " + Assembly.GetCallingAssembly().FullName);
        }
    }
}
// The example produces output like the following:
// "FirstMethod called from: FirstAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
// "OtherMethod executing assembly: SecondAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
// "OtherMethod called from: FirstAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"

Hinweise

Wenn die Methode, die die GetCallingAssembly Methode aufruft, vom JIT-Compiler (Just-In-Time) inline erweitert wird oder der Aufrufer inline erweitert wird, kann die von GetCallingAssembly zurückgegebene Assembly unerwartet abweichen. Betrachten Sie beispielsweise die folgenden Methoden und Assemblys:

  • Die Methode M1 in der Assembly A1 ruft auf GetCallingAssembly.

  • Die Methode M2 in der Assembly A2 ruft auf M1.

  • Die Methode M3 in der Assembly A3 ruft auf M2.

Wenn M1 nicht inlined ist, GetCallingAssembly wird zurückgegeben A2. Wenn M1 inline ist, GetCallingAssembly gibt zurück A3. Auf ähnliche Weise wird zurückgegebenA2, wenn M2 nicht inlined GetCallingAssembly ist. Wenn M2 inline ist, GetCallingAssembly gibt zurück A3.

Dieser Effekt tritt auch auf, wenn M1 als Tail-Aufruf von M2oder als M2 Tail-Aufruf von M3ausgeführt wird. Sie können verhindern, dass der JIT-Compiler die Methode aufgibt, die aufruft GetCallingAssembly, indem Sie das MethodImplAttribute -Attribut mit dem MethodImplOptions.NoInlining -Flag anwenden. Es gibt jedoch keinen ähnlichen Mechanismus zum Verhindern von Tail-Aufrufen.

Gilt für:

Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.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
.NET Standard 2.0, 2.1