IL3050:當作原生 AOT 發佈時,避免呼叫以 'RequiresDynamicCodeAttribute' 標註的成員
原因
將應用程式當作原生 AOT 發佈 (透過在專案中,將 PublishAot
屬性設定為 true
) 時,呼叫以 RequiresDynamicCodeAttribute
屬性標註的成員可能會導致在執行階段發生例外狀況。 以此屬性標註的成員可能需要能夠在執行階段動態建立新的程式碼,而且原生 AOT 發佈模型不會提供在執行階段產生機器碼的方法。
檔案描述
RequiresDynamicCodeAttribute 表示成員參考可能需要在執行階段產生程式碼的程式碼。
範例
// AOT analysis warning IL3050: Program.<Main>$(String[]): Using member 'System.Type.MakeGenericType(Type[])'
// which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. The native code for
// this instantiation might not be available at runtime.
typeof(Generic<>).MakeGenericType(unknownType);
class Generic<T> { }
struct SomeStruct { }
如何修正違規
以 RequiresDynamicCodeAttribute
屬性標註的成員會有一則訊息,可為當作原生 AOT 發佈的使用者提供實用資訊。 請考慮將現有的程式碼調整為該屬性的訊息,或是移除不符合規則的呼叫。
有些標註為 RequiresDynamicCodeAttribute
的 API 在特定模式中呼叫時不會觸發警告。 如需詳細資訊,請參閱標記為 RequiresDynamicCode 的內建 API。