Assembly.GetCallingAssembly Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt die Assembly Methode zurück, die die derzeit ausgeführte Methode aufgerufen hat.
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
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 aufgerufen.
// 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
Hinweise
Wenn die Methode, die die GetCallingAssembly Methode aufruft, durch den Just-in-Time-Compiler (JIT) inline erweitert wird oder wenn der Aufrufer inline erweitert wird, kann sich die zurückgegebene GetCallingAssembly Assembly unerwartet unterscheiden. Betrachten Sie beispielsweise die folgenden Methoden und Assemblys:
Methode
M1in AssemblyaufrufenA1GetCallingAssembly.Methode
M2in AssemblyaufrufenA2M1.Methode
M3in AssemblyaufrufenA3M2.
Wenn M1 nicht inlineiert ist, GetCallingAssembly wird zurückgegeben A2. Wenn M1 der Wert inlined ist, GetCallingAssembly wird zurückgegeben A3. In ähnlicher Weise wird zurückgegeben, M2GetCallingAssemblywenn A2 sie nicht inlineiert ist. Wenn M2 der Wert inlined ist, GetCallingAssembly wird zurückgegeben A3.
Dieser Effekt tritt auch auf, wenn M1 er als Tail-Aufruf M2ausgeführt wird, oder wenn M2 er als Tail-Aufruf ausgeführt wird M3. Sie können verhindern, dass der JIT-Compiler die Methode angibt, die aufgerufen wird GetCallingAssembly, indem Sie das MethodImplAttribute Attribut mit dem MethodImplOptions.NoInlining Flag anwenden, aber es gibt keinen ähnlichen Mechanismus zum Verhindern von Tailaufrufen.