當停用堆疊追蹤支援時,Assembly.GetCallingAssembly 的行為會改變

Assembly.GetCallingAssembly() 現在支援原生 AOT,並使用堆疊追蹤資料來解析呼叫者。 如果已停用堆疊追蹤支援,該方法現在會在 Native AOT 和 CoreCLR 上都擲回 NotSupportedException。

所推出的版本

.NET 11 預覽版 7

以前的行為

先前在 Native AOT 上,Assembly.GetCallingAssembly() 一律會擲回 PlatformNotSupportedException。 先前在 CoreCLR 上,即使 StackTraceSupport 設定為 false,該方法仍會傳回呼叫組件。

新行為

從 .NET 11 開始,在 Native AOT 上,Assembly.GetCallingAssembly() 會透過檢查堆疊追蹤資料來傳回呼叫端組件。 從 .NET 11 開始,在 Native AOT 和 CoreCLR 上,如果將 false 功能切換設為 NotSupportedException,此方法會擲回 StackTraceSupport。

例外訊息為:

當 StackTraceSupport 功能切換設定為 false 時,無法取得堆疊追蹤資訊。

破壞性變更的類型

此變更為行為變更。

變更原因

要回傳正確的呼叫者, Assembly.GetCallingAssembly() 需要堆疊追蹤資料。 若無法支援堆疊追蹤,執行時無法可靠地判斷呼叫者。 執行階段現在會擲回 NotSupportedException,而不是傳回不正確的結果。 關於原生 AOT 支援細節,請參見 dotnet/runtime#129963。

如果你發佈時將 StackTraceSupport 設為 false,且應用程式呼叫 Assembly.GetCallingAssembly(),就會出現 NotSupportedException。 使用下列其中一個選項:

受影響的 API