Pengecualian Runtime di .NET Native Apps

Penting untuk menguji build rilis aplikasi Universal Windows Platform Anda di platform target mereka karena konfigurasi debug dan rilis benar-benar berbeda. Secara default, konfigurasi debug menggunakan runtime .NET Core untuk mengkompilasi aplikasi Anda, tetapi konfigurasi rilis menggunakan .NET Native untuk mengkompilasi aplikasi Anda ke kode asli.

Penting

Untuk informasi tentang menangani pengecualian MissingMetadataException, MissingInteropDataException, dan MissingRuntimeArtifactException yang mungkin Anda temui saat menguji versi rilis aplikasi Anda, lihat "Langkah 4: Mengatasi kekurangan metadata secara manual" dalam topik Memulai, serta Reflection dan .NET Native dan Referensi File Konfigurasi Runtime Directives (rd.xml).

Versi debug dan rilis

Ketika build debug dijalankan terhadap runtime .NET Core, build tersebut belum dikompilasi ke kode asli. Ini membuat semua layanan yang biasanya disediakan oleh runtime menjadi tersedia untuk aplikasi Anda.

Di sisi lain, build rilis mengkompilasi menjadi kode asli untuk platform targetnya, menghapus sebagian besar dependensi pada runtime dan pustaka eksternal, dan sangat mengoptimalkan kode untuk kinerja maksimum.

Saat Anda men-debug build rilis yang dikompilasi dengan menggunakan .NET Native:

  • Anda menggunakan mesin debug .NET Native, yang berbeda dari alat debugging .NET normal.

  • Ukuran executable Anda dikurangi sebanyak mungkin. Salah satu cara .NET Native mengurangi ukuran executable adalah dengan memangkas pesan pengecualian runtime secara signifikan, dan topik ini dibahas lebih rinci dalam bagian Pesan Pengecualian Runtime.

  • Kode Anda sudah dioptimalkan. Ini berarti bahwa inlining digunakan jika memungkinkan. (Pengikatan kode (Inlining) memindahkan kode dari rutinitas eksternal ke dalam rutinitas panggilan.) Fakta bahwa .NET Native menyediakan runtime khusus dan mengimplementasikan pengikatan kode (inlining) agresif berdampak pada tumpukan panggilan yang ditampilkan ketika melakukan debug. Untuk informasi selengkapnya, lihat bagian tumpukan panggilan runtime.

Nota

Anda dapat mengontrol apakah build debug dan release dikompilasi dengan rantai alat .NET Native dengan mencentang atau menghapus centang pada kotak Kompilasi dengan rantai alat .NET Native. Namun, Microsoft Store akan selalu mengkompilasi versi produksi aplikasi Anda dengan rantai alat .NET Native.

Pesan pengecualian runtime

Untuk meminimalkan ukuran aplikasi yang dapat dieksekusi, .NET Native tidak menyertakan teks lengkap pesan pengecualian. Akibatnya, pengecualian runtime yang dilemparkan dalam build rilis mungkin tidak menampilkan pesan pengecualian secara lengkap. Sebagai gantinya, teks mungkin terdiri dari substring bersama dengan tautan untuk diikuti untuk informasi selengkapnya. Misalnya, informasi pengecualian mungkin muncul sebagai:

Exception thrown: '$16_System.AggregateException' in Unknown Module.

Additional information: AggregateException_ctor_DefaultMessage

If there is a handler for this exception, the program may be safely continued.

Jika Anda memerlukan pesan pengecualian lengkap, jalankan build debug sebagai gantinya. Misalnya, informasi pengecualian sebelumnya dari build rilis mungkin muncul sebagai berikut dalam build debug:

Exception thrown: 'System.AggregateException' in NativeApp.exe.

Additional information: Value does not fall within the expected range.

Tumpukan panggilan runtime

Karena inlining dan pengoptimalan lainnya, tumpukan panggilan yang ditampilkan oleh aplikasi yang dikompilasi oleh toolchain .NET Native mungkin tidak membantu Anda dengan jelas mengidentifikasi jalur menuju pengecualian runtime.

Untuk mendapatkan paket lengkap, jalankan build debug alih-alih.

Lihat juga