Le comportement de Assembly.GetCallingAssembly change lorsque la prise en charge de la trace de la pile d’appels est désactivée

Assembly.GetCallingAssembly() prend désormais en charge l’AOT native et utilise les données de trace de pile pour identifier l’appelant. Si la prise en charge des traces de pile est désactivée, la méthode lève désormais NotSupportedException aussi bien sur Native AOT que sur CoreCLR.

Version introduite

.NET 11 Preview 7

Comportement antérieur

Auparavant, avec l’AOT natif, Assembly.GetCallingAssembly() levait toujours PlatformNotSupportedException. Auparavant, sur CoreCLR, la méthode renvoyait l’assembly appelant, même si StackTraceSupport était défini sur false.

Nouveau comportement

À partir de .NET 11, avec Native AOT, Assembly.GetCallingAssembly() retourne l’assembly appelant en analysant les données de trace de pile. À compter de .NET 11, avec Native AOT et CoreCLR, la méthode lève NotSupportedException si le commutateur de fonctionnalité StackTraceSupport est défini sur false.

Le message d’exception est le suivant :

Impossible de récupérer les informations de trace de pile lorsque le commutateur de fonctionnalité StackTraceSupport a la valeur false.

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Pour identifier correctement l’appelant, Assembly.GetCallingAssembly() nécessite des données de pile d’appels. Si la prise en charge des traces de pile n’est pas disponible, le runtime ne peut pas déterminer l’appelant de manière fiable. L’environnement d’exécution lève désormais NotSupportedException au lieu de renvoyer un résultat incorrect. Pour en savoir plus sur la prise en charge de Native AOT, consultez dotnet/runtime#129963.

Si vous publiez avec StackTraceSupport défini sur Assembly.GetCallingAssembly() et que votre application appelle false, attendez-vous à NotSupportedException. Utilisez une de ces options :

  • Activez la prise en charge des traces de pile en supprimant le commutateur ou le paramètre StackTraceSupport sur true.
  • Supprimez les appels à Assembly.GetCallingAssembly().
  • Interceptez NotSupportedException et gérez explicitement le cas de repli.

API affectées