Assembly.GetCallingAssembly Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan Assembly metode yang memanggil metode yang saat ini dijalankan.
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
Mengembalikan
Objek Assembly
metode yang memanggil metode yang saat ini dijalankan.
Contoh
Contoh berikut mendapatkan rakitan panggilan dari metode saat ini.
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
Keterangan
Jika metode yang memanggil GetCallingAssembly metode diperluas sebaris oleh pengkompilasi just-in-time (JIT), atau jika pemanggilnya diperluas sebaris, perakitan yang dikembalikan GetCallingAssembly mungkin berbeda secara tak terduga. Misalnya, pertimbangkan metode dan rakitan berikut:
Metode
M1
dalam assemblyA1
memanggil GetCallingAssembly.Metode
M2
dalam assemblyA2
memanggilM1
.Metode
M3
dalam assemblyA3
memanggilM2
.
Ketika M1
tidak sebaris, GetCallingAssembly mengembalikan A2
. Ketika M1
inlined, GetCallingAssembly mengembalikan A3
. Demikian pula, ketika M2
tidak sebaris, GetCallingAssembly mengembalikan A2
. Ketika M2
inlined, GetCallingAssembly mengembalikan A3
.
Efek ini juga terjadi ketika M1
dijalankan sebagai panggilan ekor dari M2
, atau ketika M2
dijalankan sebagai panggilan ekor dari M3
. Anda dapat mencegah pengkompilasi JIT menginlining metode yang memanggil GetCallingAssembly, dengan menerapkan MethodImplAttribute atribut dengan MethodImplOptions.NoInlining bendera , tetapi tidak ada mekanisme serupa untuk mencegah panggilan ekor.