Assembly.GetCallingAssembly Метод

Определение

Assembly Возвращает метод, который вызвал текущий исполняемый метод.

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

Возвращаемое значение

Assembly Объект метода, вызывающего текущий исполняемый метод.

Примеры

В следующем примере возвращается вызывающая сборка текущего метода.

// 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

Комментарии

Если метод, GetCallingAssembly вызывающий метод, развертывается встроенным компилятором JIT или если вызывающий объект развернут встроенным, сборка, возвращаемая GetCallingAssembly в ней, может неожиданно отличаться. Например, рассмотрим следующие методы и сборки:

  • Метод M1 в вызовах A1сборкиGetCallingAssembly.

  • Метод M2 в вызовах A2сборкиM1.

  • Метод M3 в вызовах A3сборкиM2.

Если M1 не встраиваются, GetCallingAssembly возвращается A2. Когда M1 встраиваются, GetCallingAssembly возвращается A3. Аналогичным образом, когда M2 не встраиваются, GetCallingAssembly возвращается A2. Когда M2 встраиваются, GetCallingAssembly возвращается A3.

Этот эффект также возникает при M1 выполнении в качестве хвостового вызова или при M2 выполнении в качестве хвостового вызоваM2.M3 Вы можете запретить компилятору JIT встраивание метода, вызывающего GetCallingAssemblyметод, применив MethodImplAttribute атрибут с MethodImplOptions.NoInlining флагом, но нет аналогичного механизма предотвращения вызовов хвоста.

Применяется к