Bagikan melalui


Pengecualian Runtime di .NET Native Apps

Penting untuk menguji build rilis aplikasi Platform Windows Universal Anda pada 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: Menyelesaikan metadata yang hilang secara manual: dalam topik Memulai, serta Referensi File Konfigurasi Reflection dan .NET Native dan Runtime Directives (rd.xml).

Build debug dan rilis

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

Di sisi lain, build rilis mengkompilasi ke kode asli untuk platform targetnya, menghapus sebagian besar dependensi pada runtime dan pustaka eksternal, dan sangat mengoptimalkan kode untuk performa 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 agar .NET Native mengurangi ukuran yang dapat dieksekusi adalah dengan memangkas pesan pengecualian runtime secara signifikan, topik yang dibahas secara lebih rinci di bagian Pesan pengecualian Runtime.

  • Kode Anda sangat dioptimalkan. Ini berarti bahwa inlining digunakan jika memungkinkan. (Inlining memindahkan kode dari rutinitas eksternal ke dalam rutinitas panggilan.) Fakta bahwa .NET Native menyediakan runtime khusus dan mengimplementasikan inlining agresif memengaruhi tumpukan panggilan yang ditampilkan saat penelusuran kesalahan. Untuk informasi selengkapnya, lihat bagian Tumpukan panggilan Runtime.

Catatan

Anda dapat mengontrol apakah build debug dan rilis dikompilasi dengan rantai alat .NET Native dengan mencentang atau menghapus centang 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 teks lengkap pesan pengecualian. 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 rantai alat .NET Native mungkin tidak membantu Anda mengidentifikasi jalur dengan jelas ke pengecualian runtime.

Untuk mendapatkan tumpukan penuh, jalankan build debug sebagai gantinya.

Lihat juga