Assembly.GetCallingAssembly Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Assembly A jelenleg végrehajtó metódust meghívó metódus értékét adja vissza.
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
Válaszok
A Assembly jelenleg végrehajtó metódust meghívó metódus objektuma.
Példák
Az alábbi példa lekéri az aktuális metódus hívó szerelvényét.
// 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
Megjegyzések
Ha a GetCallingAssembly metódust meghívó metódust a just-in-time (JIT) fordítója beágyazottan bővíti, vagy ha a hívója beágyazottan van kibontva, a visszaadott GetCallingAssembly szerelvény váratlanul eltérhet. Vegyük például a következő módszereket és szerelvényeket:
Metódus
M1a szerelvényhívásokbanA1GetCallingAssembly.Metódus
M2a szerelvényhívásokbanA2M1.Metódus
M3a szerelvényhívásokbanA3M2.
Ha M1 nincs beágyazott, GetCallingAssembly akkor a függvény a következőt adja A2vissza: . Ha M1 beágyazott, GetCallingAssembly akkor a függvény a következőt adja A3vissza: . Hasonlóképpen, ha M2 nincs beágyazott, GetCallingAssembly akkor a visszaadott A2érték. Ha M2 beágyazott, GetCallingAssembly akkor a függvény a következőt adja A3vissza: .
Ez az effektus akkor is jelentkezik, ha M1 a rendszer farokhívásként hajtja végre a rendszerbőlM2, vagy amikor M2 a rendszer farokhívásként hajtja végre.M3 Megakadályozhatja, hogy GetCallingAssemblya JIT-fordító a jelölővel MethodImplAttribute együtt alkalmazza az MethodImplOptions.NoInlining attribútumot, de a farokhívások megelőzésére nincs hasonló mechanizmus.