リフレクションおよび .NET ネイティブ

.NET Framework では、マネージド開発はリフレクション API を介したメタプログラミングをサポートしています。 リフレクションによって、アプリ内のオブジェクトの検査、検査で検出されたオブジェクトでのメソッドの呼び出し、実行時の新しい型の生成、およびその他多数の動的コード シナリオのサポートが可能になります。 シリアル化と逆シリアル化もサポートしているため、オブジェクトのフィールド値を保持して、後で復元できます。 これらすべてのシナリオで、使用可能なメタデータに基づいてネイティブ コードを生成するために .NET Framework Just-In-Time (JIT) コンパイラが必要です。

.NET ネイティブ ランタイムには JIT コンパイラは含まれていません。 そのため、必要なネイティブ コードすべてを事前に生成しておく必要があります。 生成するコードを決定するために一連のヒューリスティックが使用されますが、これらのヒューリスティックでは、可能性のあるすべてのメタプログラミング シナリオに対処できるわけではありません。 このため、ランタイム ディレクティブを使って、これらのメタプログラミング シナリオにヒントを提供する必要があります。 必要なメタデータまたは実装コードを実行時に使うことができない場合、アプリは MissingMetadataExceptionMissingRuntimeArtifactException、または MissingInteropDataException 例外をスローします。 次の 2 つのトラブルシューティング ツールを使用すると、この例外を排除するランタイム ディレクティブ ファイルの適切なエントリが生成されます。

注意

ランタイム ディレクティブ ファイルが必要となる理由の背景を含む .NET ネイティブのコンパイルの概要については、「 .NET ネイティブとコンパイル」をご覧ください。

また、.NET ネイティブでは、.NET Framework クラス ライブラリのプライベート メンバーに対するリフレクションを実行できません。 たとえば、.NET Framework クラス ライブラリ型のフィールドを取得するために TypeInfo.DeclaredFields プロパティを呼び出すと、パブリックまたはプロテクト フィールドのみが返されます。

次の記事は、アプリでリフレクションとシリアル化をサポートするために必要な概念およびリファレンスのドキュメントを提供します。

関連項目