スタック トレースのサポートが無効になっている場合の Assembly.GetCallingAssembly の動作が変更される

Assembly.GetCallingAssembly() では、ネイティブ AOT がサポートされ、スタック トレース データを使用して呼び出し元が解決されるようになりました。 スタック トレースのサポートが無効になっている場合、このメソッドはネイティブ AOT と CoreCLR の両方で NotSupportedException をスローするようになりました。

導入されたバージョン

.NET 11 Preview 7

以前の動作

以前は、ネイティブ AOT では、 Assembly.GetCallingAssembly() 常に PlatformNotSupportedExceptionをスローしました。 以前は、CoreCLR では、 StackTraceSupportfalse に設定されている場合でも、メソッドは呼び出し元のアセンブリを返していました。

新しい動作

.NET 11 以降、Native AOT では、Assembly.GetCallingAssembly()はスタック トレース データを検査して呼び出し元のアセンブリを返します。 .NET 11 以降では、ネイティブ AOT と CoreCLR の両方で、StackTraceSupport機能スイッチがfalseに設定されている場合、メソッドはNotSupportedExceptionをスローします。

例外メッセージは次のとおりです。

StackTraceSupport 機能スイッチが false に設定されている場合、スタック トレース情報を取得できません。

破壊的変更の種類

この変更は 動作の変更です。

変更理由

正しい呼び出し元を返すには、 Assembly.GetCallingAssembly() スタック トレース データが必要です。 スタック トレースのサポートが利用できない場合、ランタイムは呼び出し元を確実に特定できません。 ランタイムは、正しくない結果を返すのではなく、 NotSupportedException をスローするようになりました。 ネイティブ AOT のサポートの詳細については、 dotnet/runtime#129963 を参照してください。

StackTraceSupportfalse に設定して発行し、アプリがAssembly.GetCallingAssembly()を呼び出す場合は、NotSupportedExceptionが必要です。 次のいずれかのオプションを使います。

  • スイッチを削除するか、 StackTraceSupporttrueに設定して、スタック トレースのサポートを有効にします。
  • Assembly.GetCallingAssembly() の呼び出しを削除します。
  • NotSupportedExceptionをキャッチし、フォールバック パスを明示的に処理します。

影響を受ける API