Поведение Assembly.GetCallingAssembly изменяется при отключении поддержки трассировки стека

Assembly.GetCallingAssembly() теперь поддерживает Native AOT и использует данные трассировки стека для определения вызывающего метода. Если поддержка трассировки стека отключена, метод теперь выбрасывает NotSupportedException как в Native AOT, так и в CoreCLR.

Представленная версия

.NET 11 предварительная версия 7

Предыдущее поведение

Ранее в Native AOT Assembly.GetCallingAssembly() всегда вызывал PlatformNotSupportedException. Ранее в CoreCLR метод возвращал вызывающую сборку, даже если параметру StackTraceSupport было установлено значение false.

Новое поведение

Начиная с .NET 11, в Native AOT Assembly.GetCallingAssembly() возвращает вызывающую сборку, проверяя данные трассировки стека. Начиная с .NET 11, как в Native AOT, так и в CoreCLR, метод создает исключение NotSupportedException, если переключатель функций StackTraceSupport установлен в значение false.

Сообщение об исключении:

Не удается получить сведения трассировки стека, если параметр функции StackTraceSupport имеет значение false.

Тип разрушающего изменения

Это изменение поведения.

Причина изменения

Чтобы вернуть корректный источник вызова, Assembly.GetCallingAssembly() требуются данные трассировки стека. Если поддержка трассировки стека недоступна, среда выполнения не может надежно определить вызывающий объект. Теперь среда выполнения выдает NotSupportedException вместо возврата некорректного результата. Дополнительные сведения о поддержке Native AOT см. в dotnet/runtime#129963.

Если вы выполняете публикацию с параметром StackTraceSupport, установленным в false, и ваше приложение вызывает Assembly.GetCallingAssembly(), ожидайте NotSupportedException. Используйте один из следующих вариантов:

  • Включите поддержку трассировки стека, удалив переключатель или установив для StackTraceSupport значение true.
  • Удалите вызовы Assembly.GetCallingAssembly().
  • Перехватывайте NotSupportedException и явно обрабатывайте резервный путь выполнения.

Затронутые API