Assembly.GetCallingAssembly Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.
// 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
M1v sestaveníA1volá GetCallingAssembly.Metoda
M2v sestaveníA2voláM1.Metoda
M3v sestaveníA3volá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.