Assembly.GetCallingAssembly-Verhalten ändert sich, wenn die Unterstützung der Stapelablaufverfolgung deaktiviert ist.

Assembly.GetCallingAssembly() unterstützt jetzt native AOT und verwendet Stapelüberwachungsdaten, um den Aufrufer aufzulösen. Wenn die Stapelüberwachungsunterstützung deaktiviert ist, löst die Methode nun auf Native AOT und CoreCLR NotSupportedException aus.

Eingeführt in Version

.NET 11 Vorschau 7

Bisheriges Verhalten

Bisher hat Assembly.GetCallingAssembly() unter Native AOT immer PlatformNotSupportedException ausgelöst. Zuvor gab die Methode unter CoreCLR die aufrufende Assembly zurück, auch wenn StackTraceSupport auf false gesetzt wurde.

Neues Verhalten

Ab .NET 11 gibt Assembly.GetCallingAssembly() unter Native AOT durch Auswerten von Stapelüberwachungsdaten die aufrufende Assembly zurück. Ab .NET 11 löst die Methode sowohl unter Native AOT als auch unter CoreCLR NotSupportedException aus, wenn der StackTraceSupport Feature-Schalter auf false gesetzt ist.

Die Ausnahmemeldung lautet:

Stapelablaufverfolgungsinformationen können nicht abgerufen werden, wenn der StackTraceSupport-Featureswitch auf "false" festgelegt ist.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Um einen korrekten Aufrufer zurückzugeben, benötigt Assembly.GetCallingAssembly() Stack-Trace-Daten. Wenn die Stapelablaufverfolgungsunterstützung nicht verfügbar ist, kann die Laufzeit den Aufrufer nicht zuverlässig ermitteln. Die Laufzeit wirft jetzt NotSupportedException, anstatt ein falsches Ergebnis zurückzugeben. Details zur nativen AOT-Unterstützung finden Sie unter dotnet/runtime#129963.

Wenn Sie mit StackTraceSupport, das auf false gesetzt ist, veröffentlichen und Ihre App Assembly.GetCallingAssembly() aufruft, rechnen Sie mit NotSupportedException. Verwenden Sie eine dieser Optionen:

  • Aktivieren Sie die Stapelüberwachungsunterstützung, indem Sie den Schalter oder die Einstellung StackTraceSupport auf true entfernen.
  • Entfernen Sie Aufrufe von Assembly.GetCallingAssembly().
  • Fangen Sie NotSupportedException ab und behandeln Sie den Fallbackpfad explizit.

Betroffene APIs