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.
// 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
M1dalam assemblyA1memanggil GetCallingAssembly.Metode
M2dalam assemblyA2memanggilM1.Metode
M3dalam assemblyA3memanggilM2.
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.