次の方法で共有


IL3050: ネイティブ AOT として発行するときに 'RequiresDynamicCodeAttribute' の注釈があるメンバーは呼び出さないようにします

原因

(プロジェクトの PublishAot プロパティを true に設定することで) ネイティブ AOT としてアプリを発行すると、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」を参照してください。