O comportamento do Assembly.GetCallingAssembly muda quando o suporte a traços de pilha é desativado

Assembly.GetCallingAssembly() agora suporta Native AOT e utiliza dados de rastos da pilha para determinar o autor da chamada. Se o suporte a stack trace estiver desativado, o método agora ativa NotSupportedException tanto o AOT nativo como o CoreCLR.

Versão introduzida

.NET 11 Preview 7

Comportamento anterior

Anteriormente, no Native AOT, Assembly.GetCallingAssembly() lançava sempre PlatformNotSupportedException. Anteriormente, no CoreCLR, o método devolveu o assembly de chamada mesmo que StackTraceSupport estivesse definido como false.

Novo comportamento

A partir do .NET 11, em AOT nativo, Assembly.GetCallingAssembly() devolve a assemblagem chamadora inspecionando os dados do rastreio da pilha. A partir do .NET 11, tanto no AOT nativo como no CoreCLR, o método lança NotSupportedException se o StackTraceSupport feature switch estiver definido para false.

A mensagem de exceção é:

Não é possível recuperar informações de rastreio da pilha quando a opção de funcionalidade StackTraceSupport estiver definida como false.

Tipo de mudança disruptiva

Esta mudança é uma mudança comportamental.

Motivo da mudança

Para identificar o chamador correto, Assembly.GetCallingAssembly() requer dados de rastreio da pilha. Se o suporte a stack trace não estiver disponível, o runtime não consegue determinar o chamador de forma fiável. O ambiente de execução gera agora NotSupportedException em vez de devolver um resultado incorreto. Para detalhes de suporte nativo ao AOT, veja dotnet/runtime#129963.

Se publicar com StackTraceSupport definido como false e a sua aplicação chamar Assembly.GetCallingAssembly(), espere NotSupportedException. Use uma destas opções:

APIs afetadas