Pengaturan Kebijakan Arahan Runtime

Pengaturan kebijakan direktif runtime untuk .NET Native menentukan ketersediaan metadata untuk jenis dan jenis anggota pada durasi. Tanpa metadata yang diperlukan, operasi yang mengandalkan refleksi, serialisasi dan deserialisasi, atau marsekal jenis .NET Framework ke COM atau Windows Runtime dapat gagal dan memberikan pengecualian. Pengecualian yang paling umum adalah MissingMetadataException dan (dalam kasus interop) MissingInteropDataException.

Pengaturan kebijakan runtime dikontrol oleh file arahan runtime (.rd.xml). Setiap arahan runtime mendefinisikan kebijakan untuk elemen program tertentu, seperti assembly ( <elemen Assembly> ), jenis ( <elemen Type> ), atau metode ( <elemen Method> ). Arahan mencakup satu atau beberapa atribut yang menentukan jenis kebijakan refleksi, jenis kebijakan serialisasi, dan jenis kebijakan interop yang dibahas di bagian berikutnya. Nilai atribut menentukan pengaturan kebijakan.

Jenis kebijakan

File arahan runtime mengenali tiga kategori jenis kebijakan: refleksi, serialisasi, dan interop.

  • Jenis kebijakan refleksi menentukan metadata mana yang tersedia pada durasi untuk refleksi:

    • Activate mengontrol akses runtime ke konstruktor, untuk mengaktifkan aktivasi instans.

    • Browse mengontrol kueri untuk informasi tentang elemen program.

    • Dynamic mengontrol akses runtime ke semua jenis dan anggota untuk mengaktifkan pemrograman dinamis.

    Tabel berikut mencantumkan jenis kebijakan refleksi dan elemen program yang dapat digunakan.

    Elemen Aktifkan Telusuri Dinamis
    <Aplikasi> ✔️ ✔️ ✔️
    <Rakitan> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Kejadian> ✔️ ✔️
    <Bidang> ✔️ ✔️
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Metode> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <Namespace> ✔️ ✔️ ✔️
    <Parameter> ✔️ ✔️ ✔️
    <Properti> ✔️ ✔️
    <Subtipe> ✔️ ✔️ ✔️
    <Jenis> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • Jenis kebijakan serialisasi menentukan metadata mana yang tersedia pada durasi untuk serialisasi dan deserialisasi:

    • Serialize mengontrol akses runtime ke konstruktor, bidang, dan properti, untuk memungkinkan instans jenis diserialisasikan oleh pustaka pihak ketiga seperti serializer Newtonsoft JSON.

    • DataContractSerializer mengontrol akses runtime ke konstruktor, bidang, dan properti, untuk memungkinkan instans jenis diserialisasikan oleh DataContractSerializer kelas .

    • DataContractJsonSerializer mengontrol akses runtime ke konstruktor, bidang, dan properti, untuk memungkinkan instans jenis diserialisasikan oleh DataContractJsonSerializer kelas .

    • XmlSerializer mengontrol akses runtime ke konstruktor, bidang, dan properti, untuk memungkinkan instans jenis diserialisasikan oleh XmlSerializer kelas .

    Tabel berikut mencantumkan jenis kebijakan serialisasi dan elemen program yang dapat digunakan.

    Elemen Serialisasi DataContractSerializer DataContractJsonSerializer XmlSerializer
    <Aplikasi> ✔️ ✔️ ✔️ ✔️
    <Rakitan> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <Kejadian>
    <Bidang> ✔️
    <GenericParameter> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <Metode>
    <MethodInstantiation>
    <Namespace> ✔️ ✔️ ✔️ ✔️
    <Parameter> ✔️ ✔️ ✔️ ✔️
    <Properti> ✔️
    <Subtipe> ✔️ ✔️ ✔️ ✔️
    <Jenis> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • Jenis kebijakan interop menentukan metadata mana yang tersedia pada durasi untuk meneruskan jenis referensi, jenis nilai, dan penunjuk fungsi ke COM dan Windows Runtime:

    • MarshalObject mengontrol marshaling asli ke COM dan Windows Runtime untuk jenis referensi.

    • MarshalDelegate mengontrol marsekal asli jenis delegasi sebagai penunjuk fungsi.

    • MarshalStructure mengontrol marshaling asli ke COM dan Windows Runtime untuk jenis nilai.

    Tabel berikut mencantumkan jenis kebijakan interop dan elemen program yang dapat digunakan.

    Elemen MarshalObject MarshalDelegate MarshalStructure
    <Aplikasi> ✔️ ✔️ ✔️
    <Rakitan> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <Kejadian>
    <Bidang>
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <Metode>
    <MethodInstantiation>
    <Namespace> ✔️ ✔️ ✔️
    <Parameter> ✔️ ✔️ ✔️
    <Properti>
    <Subtipe> ✔️ ✔️ ✔️
    <Jenis> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

Pengaturan kebijakan

Setiap jenis kebijakan dapat diatur ke salah satu nilai yang tercantum dalam tabel berikut. Perhatikan bahwa elemen yang mewakili anggota jenis mendukung serangkaian pengaturan kebijakan yang berbeda dari elemen lain.

Pengaturan kebijakan Deskripsi Assemblyelemen , Namespace, Type, dan TypeInstantiation Eventelemen , Field, Method, MethodInstantiation, dan Property
All Mengaktifkan kebijakan untuk semua jenis dan anggota yang tidak dihapus oleh rantai alat .NET Native. ✔️
Auto Menentukan bahwa kebijakan default harus digunakan untuk jenis kebijakan untuk elemen program tersebut. Ini identik dengan menghilangkan kebijakan untuk jenis kebijakan tersebut. Auto biasanya digunakan untuk menunjukkan bahwa kebijakan diwarisi dari elemen induk. ✔️ ✔️
Excluded Menentukan bahwa kebijakan dinonaktifkan untuk elemen program tertentu. Misalnya, arahan runtime:

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

menentukan bahwa metadata untuk BusinessClasses.Person kelas tidak tersedia baik untuk menelusuri atau untuk membuat instans dan memodifikasi Person objek secara dinamis.
✔️ ✔️
Included Mengaktifkan kebijakan jika metadata untuk jenis induk tersedia. ✔️
Public Mengaktifkan kebijakan untuk jenis publik atau anggota, kecuali rantai alat menentukan bahwa jenis atau anggota tidak perlu dan karenanya menghapusnya. Pengaturan ini berbeda dari Required Public, yang memastikan bahwa metadata untuk jenis publik dan anggota selalu tersedia bahkan jika rantai alat menentukan bahwa itu tidak perlu. ✔️
PublicAndInternal Mengaktifkan kebijakan untuk jenis atau anggota publik dan internal, kecuali rantai alat menentukan bahwa jenis atau anggota tidak perlu dan karenanya menghapusnya. Pengaturan ini berbeda dari Required PublicAndInternal, yang memastikan bahwa metadata untuk jenis publik dan internal dan anggota selalu tersedia bahkan jika rantai alat menentukan bahwa itu tidak perlu. ✔️
Required Menentukan bahwa kebijakan untuk anggota diaktifkan dan metadata tersebut akan tersedia meskipun anggota tampaknya digunakan. ✔️
Required Public Mengaktifkan kebijakan untuk jenis atau anggota publik, dan memastikan bahwa metadata untuk jenis publik dan anggota selalu tersedia. Pengaturan ini berbeda dari Public, yang membuat metadata untuk jenis publik dan anggota tersedia hanya jika rantai alat menentukan bahwa itu diperlukan. ✔️
Required PublicAndInternal Mengaktifkan kebijakan untuk jenis atau anggota publik dan internal, dan memastikan bahwa metadata untuk jenis dan anggota publik dan internal selalu tersedia. Pengaturan ini berbeda dari PublicAndInternal, yang membuat metadata untuk jenis publik dan internal dan anggota hanya tersedia jika rantai alat menentukan bahwa itu diperlukan. ✔️
Required All Mengharuskan rantai alat untuk menyimpan semua jenis dan anggota apakah mereka digunakan atau tidak, dan mengaktifkan kebijakan untuk mereka. ✔️

Lihat juga