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」を参照してください。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET