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。 使用下列其中一個選項:
- 透過移除交換器或設定
StackTraceSupport為true來啟用堆疊追蹤支援。 - 移除對 Assembly.GetCallingAssembly() 的呼叫。
- 捕捉 NotSupportedException,並明確地處理後援路徑。