Sdílet prostřednictvím


Assembly.GetCallingAssembly Metoda

Definice

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

public:
 static System::Reflection::Assembly ^ GetCallingAssembly();
public static System.Reflection.Assembly GetCallingAssembly ();
static member GetCallingAssembly : unit -> System.Reflection.Assembly
Public Shared Function GetCallingAssembly () As Assembly

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.

using namespace System;
using namespace System::Reflection;

void main()
{
   // Instantiate a target object.
   Int32 integer1 = 0;
   // Set the Type instance to the target class type.
   Type^ type1 = integer1.GetType();
   // Instantiate an Assembly class to the assembly housing the Integer type.
   Assembly^ sampleAssembly = Assembly::GetAssembly(integer1.GetType());
   // Display the name of the assembly that is calling the method.
   Console::WriteLine("GetCallingAssembly = {0}", Assembly::GetCallingAssembly()->FullName);
}
// The example displays output like the following:
//    GetCallingAssembly = Example, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// 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"
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Instantiate a target object.
      Dim int1 As Integer
      ' Set the Type instance to the target class type.
      Dim type1 As Type =int1.GetType()
      ' Instantiate an Assembly class to the assembly housing the Integer type.
      Dim sampleAssembly = Assembly.GetAssembly(int1.GetType())
      ' Display the name of the assembly that is calling the method.
      Console.WriteLine(("GetCallingAssembly = " + Assembly.GetCallingAssembly().FullName))
   End Sub
End Module
' The example displays output like the following:
'   GetCallingAssembly = Example, 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