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.
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í A2
hodnotu .
GetCallingAssembly Při M1
vkládání vrátí A3
hodnotu . Podobně, pokud M2
není vložený, GetCallingAssembly vrátí A2
.
GetCallingAssembly Při M2
vkládání vrátí A3
hodnotu .
K tomuto efektu dochází také při M1
spuštění jako koncové volání z M2
nebo 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.