ランタイム ディレクティブ ポリシーの設定

.NET ネイティブのランタイム ディレクティブ ポリシー設定は、実行時に型と型のメンバーのメタデータが使用可能かどうかを決定します。 必要なメタデータがない場合、COM または Windows ランタイムへの .NET Framework 型のリフレクション、シリアル化と逆シリアル化、またはマーシャリングを利用する操作が失敗し、例外をスローする可能性があります。 最も一般的な例外は、MissingMetadataException と、MissingInteropDataException (相互運用の場合) です。

実行時ポリシー設定は、ランタイム ディレクティブ (.rd.xml) ファイルによって制御されます。 各ランタイム ディレクティブは、アセンブリ (<Assembly> 要素)、型 (<Type> 要素)、またはメソッド (<Method> 要素) などの特定のプログラム要素のポリシーを定義します。 ディレクティブには、次のセクションで説明する、リフレクション ポリシー種類、シリアル化ポリシー種類、および相互運用ポリシー種類を定義する属性が 1 つ以上含まれています。 属性の値はポリシー設定を定義します。

ポリシーの種類

ランタイム ディレクティブ ファイルは、ポリシーの種類について、リフレクション、シリアル化、および相互運用の 3 つのカテゴリを認識します。

  • リフレクション ポリシー種類は、実行時にリフレクションで使用できるメタデータを決定します。

    • Activate はコンストラクターへの実行時アクセスを制御して、インスタンスのアクティブ化を有効にします。

    • Browse は、プログラム要素に関する情報の照会を制御します。

    • Dynamic は、すべての型とメンバーへの実行時アクセスを制御して、動的プログラミングを有効にします。

    次の表に、リフレクション ポリシー種類と、この種類で使用できるプログラム要素を示します。

    要素 アクティブ化 参照 動的
    <Application> ✔️ ✔️ ✔️
    <アセンブリ> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <イベント> ✔️ ✔️
    <フィールド> ✔️ ✔️
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <メソッド> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <名前空間> ✔️ ✔️ ✔️
    <パラメーター> ✔️ ✔️ ✔️
    <プロパティ> ✔️ ✔️
    <Subtypes> ✔️ ✔️ ✔️
    <種類> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • シリアル化ポリシー種類は、実行時にシリアル化と逆シリアル化で使用できるメタデータを決定します。

    • Serialize は、コンストラクター、フィールド、およびプロパティへの実行時アクセスを制御し、Newtonsoft の JSON シリアライザーなどのサードパーティ ライブラリによって型インスタンスをシリアル化できるようにします。

    • DataContractSerializer はコンストラクター、フィールド、およびプロパティへの実行時アクセスを制御して、型インスタンスを DataContractSerializer クラスによりシリアル化できるようにします。

    • DataContractJsonSerializer はコンストラクター、フィールド、およびプロパティへの実行時アクセスを制御して、型インスタンスを DataContractJsonSerializer クラスによりシリアル化できるようにします。

    • XmlSerializer はコンストラクター、フィールド、およびプロパティへの実行時アクセスを制御して、型インスタンスを XmlSerializer クラスによりシリアル化できるようにします。

    次の表に、シリアル化ポリシー種類と、この種類で使用できるプログラム要素を示します。

    要素 シリアル化 DataContractSerializer DataContractJsonSerializer XmlSerializer
    <Application> ✔️ ✔️ ✔️ ✔️
    <アセンブリ> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <イベント>
    <フィールド> ✔️
    <GenericParameter> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <メソッド>
    <MethodInstantiation>
    <名前空間> ✔️ ✔️ ✔️ ✔️
    <パラメーター> ✔️ ✔️ ✔️ ✔️
    <プロパティ> ✔️
    <Subtypes> ✔️ ✔️ ✔️ ✔️
    <種類> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • 相互運用ポリシー種類は、COM および Windows ランタイムに参照型、値型、および関数ポインターを渡すために実行時に使用できるメタデータを決定します。

    • MarshalObject は、参照型の COM および Windows ランタイムへのネイティブ マーシャリングを制御します。

    • MarshalDelegate は、関数ポインターとしてのデリゲート型のネイティブ マーシャリングを制御します。

    • MarshalStructure は、値型の COM および Windows ランタイムへのネイティブ マーシャリングを制御します。

    次の表に、相互運用ポリシー種類と、この種類で使用できるプログラム要素を示します。

    要素 MarshalObject MarshalDelegate MarshalStructure
    <Application> ✔️ ✔️ ✔️
    <アセンブリ> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <イベント>
    <フィールド>
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <メソッド>
    <MethodInstantiation>
    <名前空間> ✔️ ✔️ ✔️
    <パラメーター> ✔️ ✔️ ✔️
    <プロパティ>
    <Subtypes> ✔️ ✔️ ✔️
    <種類> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

ポリシー設定

各ポリシーの種類は、次の表に示すいずれかの値に設定できます。 型のメンバーを表す要素は、他の要素とは異なる一連のポリシー設定をサポートしていることに注意してください。

ポリシー設定 説明 AssemblyNamespaceType、および TypeInstantiation 要素 EventFieldMethodMethodInstantiation、および Property 要素
All .NET ネイティブ ツール チェーンが削除しないすべての型とメンバーのポリシーを有効にします。 ✔️
Auto そのプログラム要素のポリシーの種類に、既定のポリシーを使用する必要があることを指定します。 これは、そのポリシーの種類のポリシーを省略することと同じです。 Auto は通常、ポリシーが親要素から継承されることを示すために使用されます。 ✔️ ✔️
Excluded 特定のプログラム要素についてポリシーを無効にすることを指定します。 たとえば、次のランタイム ディレクティブは、

<Type Name="BusinessClasses.Person" Browse="Excluded" Dynamic="Excluded" />

BusinessClasses.Person オブジェクトの参照、および動的なインスタンス化と変更のいずれにも、Person クラスのメタデータを使用できないことを示しています。
✔️ ✔️
Included 親型のメタデータが使用可能な場合に、ポリシーを有効にします。 ✔️
Public ツール チェーンによってパブリック型またはパブリック メンバーが不要と判断され、削除されない限り、それらの型またはメンバーのポリシーを有効にします。 この設定は、ツール チェーンによって不要であると判断された場合でもパブリック型とパブリック メンバーのメタデータを常に使用可能にする Required Public とは異なります。 ✔️
PublicAndInternal ツール チェーンでパブリックおよび内部の型またはメンバーが不要であると判断され、削除されない限り、それらの型またはメンバーのポリシーを有効にします。 この設定は、ツール チェーンによって不要と判断された場合でもパブリックおよび内部の型とメンバーのメタデータを常に使用可能にする Required PublicAndInternal とは異なります。 ✔️
Required メンバーが使用されていると見なされる場合でも、メンバーのポリシーを有効にし、そのメタデータを使用できるようにすることを指定します。 ✔️
Required Public パブリック型またはパブリック メンバーのポリシーを有効にして、パブリック型およびパブリック メンバーのメタデータが常に使用可能であるようにします。 この設定は、ツール チェーンが必要であると判断した場合にのみ、パブリック型とパブリック メンバーのメタデータを使用可能にする Public とは異なります。 ✔️
Required PublicAndInternal パブリックおよび内部の型またはメンバーのポリシーを有効にして、パブリックおよび内部の型とメンバーのメタデータが常に使用可能であるようにします。 この設定は、ツール チェーンが必要であると判断した場合にのみ、パブリックおよび内部の型とメンバーのメタデータを使用可能にする PublicAndInternal とは異なります。 ✔️
Required All 使用されているかどうかに関係なく、すべての型とメンバーを保持し、そのポリシーを有効にするために、ツール チェーンを要求します。 ✔️

関連項目