Assembly.GetCallingAssembly Metoda

Definice

Assembly Vrátí hodnotu metody, která vyvolala aktuálně spuštěnou metodu.

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

Návraty

Objekt Assembly metody, která vyvolala aktuálně spuštěnou metodu.

Příklady

Následující příklad získá volání sestavení aktuální metody.

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"

Poznámky

Pokud je metoda, která volá metodu GetCallingAssembly , rozbalí vloženě kompilátorem JIT (just-in-time) nebo pokud je její volající rozbalen inline, může se sestavení vrácené GetCallingAssembly nástrojem neočekávaně lišit. Zvažte například následující metody a sestavení:

  • Metoda M1 v sestavení A1 volá GetCallingAssembly.

  • Metoda M2 v sestavení A2 volá M1.

  • Metoda M3 v sestavení A3 volá M2.

Pokud M1 není vložený, GetCallingAssembly vrátí A2hodnotu . GetCallingAssembly Při M1 vkládání vrátí A3hodnotu . Podobně, pokud M2 není vložený, GetCallingAssembly vrátí A2. GetCallingAssembly Při M2 vkládání vrátí A3hodnotu .

K tomuto efektu dochází také při M1 spuštění jako koncové volání z M2nebo při M2 spuštění jako koncové volání z M3. Použitím atributu s MethodImplOptions.NoInlining příznakem můžete zabránit kompilátoru JIT ve vkládání metody , která volá GetCallingAssembly, MethodImplAttribute ale neexistuje žádný podobný mechanismus pro zabránění volání tail.

Platí pro

Produkt Verze
.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