Lire en anglais

Partager via


Assembly.GetCallingAssembly Méthode

Définition

Retourne le Assembly de la méthode ayant appelé la méthode en cours d'exécution.

C#
public static System.Reflection.Assembly GetCallingAssembly();

Retours

Objet Assembly de la méthode ayant appelé la méthode en cours d'exécution.

Exemples

L’exemple suivant obtient l’assembly appelant de la méthode actuelle.

C#
// 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"

Remarques

Si la méthode qui appelle la GetCallingAssembly méthode est développée inline par le compilateur juste-à-temps (JIT), ou si son appelant est développé inline, l’assembly retourné par GetCallingAssembly peut différer de manière inattendue. Par exemple, considérez les méthodes et assemblys suivants :

  • La méthode M1 dans l’assembly A1 appelle GetCallingAssembly.

  • La méthode M2 dans l’assembly A2 appelle M1.

  • La méthode M3 dans l’assembly A3 appelle M2.

Quand M1 n’est pas inclus, GetCallingAssembly retourne A2. Quand M1 est inlined, GetCallingAssembly retourne A3. De même, quand M2 n’est pas inclus, GetCallingAssembly retourne A2. Quand M2 est inlined, GetCallingAssembly retourne A3.

Cet effet se produit également lorsque M1 s’exécute en tant qu’appel de queue à partir de M2, ou quand s’exécute M2 en tant qu’appel de queue à partir de M3. Vous pouvez empêcher le compilateur JIT d’inliner la méthode qui appelle GetCallingAssembly, en appliquant l’attribut MethodImplAttribute avec l’indicateur MethodImplOptions.NoInlining , mais il n’existe aucun mécanisme similaire pour empêcher les appels de fin.

S’applique à

Produit Versions
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1