Bagikan melalui


Pemecahan masalah pemindahan Windows Runtime 8.x ke UWP

Topik sebelumnya adalah Memindahkan proyek.

Kami sangat menyarankan untuk membaca hingga akhir panduan porting ini, tetapi kami juga memahami bahwa Anda ingin menempuh ke depan dan sampai ke tahap di mana proyek Anda dibangun dan dijalankan. Untuk itu, Anda dapat membuat kemajuan sementara dengan mengomentari atau mengendus kode apa pun yang tidak penting, dan kemudian kembali untuk melunasi utang itu nanti. Tabel gejala pemecahan masalah dan solusi dalam topik ini mungkin berguna bagi Anda pada tahap ini, meskipun itu bukan pengganti untuk membaca beberapa topik berikutnya. Anda selalu dapat merujuk kembali ke tabel saat Anda maju melalui topik selanjutnya.

Melacak masalah

Pengecualian penguraian XAML mungkin sulit didiagnosis, terutama jika tidak ada pesan kesalahan yang bermakna dalam pengecualian. Pastikan debugger dikonfigurasi untuk menangkap pengecualian kesempatan pertama (untuk mencoba dan menangkap pengecualian penguraian sejak dini). Anda mungkin dapat memeriksa variabel pengecualian dalam debugger untuk menentukan apakah HRESULT atau pesan memiliki informasi yang berguna. Selain itu, periksa jendela output Visual Studio untuk output pesan kesalahan oleh pengurai XAML.

Jika aplikasi Anda berakhir dan yang Anda tahu adalah bahwa pengecualian yang tidak tertangani dilemparkan selama penguraian markup XAML, maka itu bisa menjadi hasil dari referensi ke sumber daya yang hilang (yaitu, sumber daya yang kuncinya ada untuk aplikasi Universal 8.1 tetapi tidak untuk aplikasi Windows 10, seperti beberapa kunci TextBlock Style sistem). Atau itu bisa menjadi pengecualian yang dilemparkan di dalam UserControl, kontrol kustom, atau panel tata letak kustom.

Upaya terakhir adalah pemisahan biner. Hapus sekitar setengah markup dari Halaman dan jalankan kembali aplikasi. Anda kemudian akan tahu apakah kesalahan berada di suatu tempat di dalam setengah yang Anda hapus (yang sekarang harus Anda pulihkan dalam kasus apa pun) atau setengahnya Anda tidak menghapus. Ulangi proses dengan memisahkan setengah yang berisi kesalahan, dan seterusnya, hingga Anda nol dalam masalah.

TargetPlatformVersion

Bagian ini menjelaskan apa yang harus dilakukan jika, saat membuka proyek Windows 10 di Visual Studio, Anda akan melihat pesan "Pembaruan Visual Studio diperlukan. Satu atau beberapa proyek memerlukan versi> SDK <platform yang tidak diinstal atau disertakan sebagai bagian dari pembaruan di masa mendatang ke Visual Studio."

  • Pertama, tentukan nomor versi SDK untuk Windows 10 yang telah Anda instal. Navigasi ke C:\Program Files (x86)\Windows Kits\10\Include\<versionfoldername> dan catat <versionfoldername>, yang akan berada dalam notasi quad, "Major.Minor.Build.Revision".
  • Buka file proyek Anda untuk diedit dan temukan TargetPlatformVersion elemen dan TargetPlatformMinVersion . Edit agar terlihat seperti ini, ganti <versionfoldername> dengan nomor versi notasi quad yang Anda temukan di disk:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
    <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Pemecahan masalah gejala dan solusi

Informasi perbaikan dalam tabel dimaksudkan untuk memberi Anda info yang cukup untuk membuka blokir diri Anda sendiri. Anda akan menemukan detail lebih lanjut tentang masing-masing masalah ini saat membaca topik selanjutnya.

Gejala Obat
Saat membuka proyek Windows 10 di Visual Studio, Anda akan melihat pesan "Pembaruan Visual Studio diperlukan. Satu atau beberapa proyek memerlukan versi> SDK <platform yang tidak diinstal atau disertakan sebagai bagian dari pembaruan di masa mendatang ke Visual Studio." Lihat bagian TargetPlatformVersion dalam topik ini.
System.InvalidCastException dilemparkan ketika InitializeComponent dipanggil dalam file xaml.cs. Ini dapat terjadi ketika Anda memiliki lebih dari satu file xaml (setidaknya salah satunya memenuhi syarat MRT) yang berbagi file xaml.cs dan elemen yang sama memiliki atribut x:Name yang tidak konsisten antara dua file xaml. Coba tambahkan nama yang sama ke elemen yang sama di kedua file xaml, atau hilangkan nama sama sekali.
Saat berjalan di perangkat, aplikasi berakhir, atau saat diluncurkan dari Visual Studio, Anda melihat kesalahan "Tidak dapat mengaktifkan aplikasi Windows Runtime 8.x [...]. Permintaan aktivasi gagal dengan kesalahan 'Windows tidak dapat berkomunikasi dengan aplikasi target. Ini biasanya menunjukkan bahwa proses aplikasi target dibatalkan. […]”. Masalahnya bisa berupa kode imperatif yang berjalan di Halaman Anda sendiri atau di properti terikat (atau jenis lainnya) selama inisialisasi. Atau itu bisa terjadi saat mengurai file XAML yang akan ditampilkan ketika aplikasi dihentikan (jika diluncurkan dari Visual Studio, itu akan menjadi halaman startup). Cari kunci sumber daya yang tidak valid, dan/atau coba beberapa panduan di bagian "Melacak masalah" dalam topik ini.
Parser atau pengkompilasi XAML, atau pengecualian runtime, memberikan kesalahan "Sumber daya "<resourcekey>" tidak dapat diselesaikan.". Kunci sumber daya tidak berlaku untuk aplikasi Platform Windows Universal (UWP) (ini adalah kasus dengan beberapa sumber daya Windows Phone, misalnya). Temukan sumber daya yang setara dengan benar dan perbarui markup Anda. Contoh yang mungkin Anda temui segera adalah kunci sistem seperti PhoneAccentBrush.
Pengkompilasi C# memberikan kesalahan "Tipe atau nama namespace 'name<>' tidak dapat ditemukan [...]" atau "Nama tipe atau namespace< 'name>' tidak ada di namespace [...]" atau "Nama tipe atau namespace< 'name>' tidak ada dalam konteks saat ini". Ini kemungkinan berarti bahwa jenis diimplementasikan dalam SDK ekstensi (meskipun mungkin ada kasus di mana obatnya tidak begitu mudah). Gunakan konten referensi API Windows untuk menentukan SDK ekstensi apa yang mengimplementasikan API lalu gunakan perintah Tambahkan>Referensi Visual Studio untuk menambahkan referensi ke SDK tersebut ke proyek Anda. Jika aplikasi Anda menargetkan sekumpulan API yang dikenal sebagai keluarga perangkat universal, sangat penting bahwa Anda menggunakan kelas ApiInformation untuk menguji pada runtime untuk keberadaan SDK ekstensi sebelum Anda memanggilnya (ini disebut kode adaptif). Jika ADA API universal, maka itu selalu lebih disukai daripada API dalam SDK ekstensi. Untuk informasi selengkapnya, lihat SDK Ekstensi.

Topik berikutnya adalah Porting XAML dan UI.