Assembly.GetCallingAssembly() では、ネイティブ AOT がサポートされ、スタック トレース データを使用して呼び出し元が解決されるようになりました。 スタック トレースのサポートが無効になっている場合、このメソッドはネイティブ AOT と CoreCLR の両方で NotSupportedException をスローするようになりました。
導入されたバージョン
.NET 11 Preview 7
以前の動作
以前は、ネイティブ AOT では、 Assembly.GetCallingAssembly() 常に PlatformNotSupportedExceptionをスローしました。 以前は、CoreCLR では、 StackTraceSupport が false に設定されている場合でも、メソッドは呼び出し元のアセンブリを返していました。
新しい動作
.NET 11 以降、Native AOT では、Assembly.GetCallingAssembly()はスタック トレース データを検査して呼び出し元のアセンブリを返します。 .NET 11 以降では、ネイティブ AOT と CoreCLR の両方で、StackTraceSupport機能スイッチがfalseに設定されている場合、メソッドはNotSupportedExceptionをスローします。
例外メッセージは次のとおりです。
StackTraceSupport 機能スイッチが false に設定されている場合、スタック トレース情報を取得できません。
破壊的変更の種類
この変更は 動作の変更です。
変更理由
正しい呼び出し元を返すには、 Assembly.GetCallingAssembly() スタック トレース データが必要です。 スタック トレースのサポートが利用できない場合、ランタイムは呼び出し元を確実に特定できません。 ランタイムは、正しくない結果を返すのではなく、 NotSupportedException をスローするようになりました。 ネイティブ AOT のサポートの詳細については、 dotnet/runtime#129963 を参照してください。
推奨されるアクション
StackTraceSupportを false に設定して発行し、アプリがAssembly.GetCallingAssembly()を呼び出す場合は、NotSupportedExceptionが必要です。 次のいずれかのオプションを使います。
- スイッチを削除するか、
StackTraceSupportをtrueに設定して、スタック トレースのサポートを有効にします。 - Assembly.GetCallingAssembly() の呼び出しを削除します。
- NotSupportedExceptionをキャッチし、フォールバック パスを明示的に処理します。
影響を受ける API
.NET