Bagikan melalui


Pemecahan masalah pemindahan Windows Phone Silverlight ke UWP

Topik sebelumnya adalah Porting proyek.

Kami sangat menyarankan untuk membaca hingga akhir panduan porting ini, tetapi kami juga memahami bahwa Anda ingin menepati ke depan dan sampai ke panggung tempat proyek Anda dibangun dan dijalankan. Untuk itu, Anda dapat membuat kemajuan sementara dengan mengomentari atau mengomentari kode yang tidak penting, dan kemudian kembali untuk melunasi utang itu nanti. Tabel pemecahan masalah gejala dan solusi dalam topik ini mungkin berguna bagi Anda pada tahap ini, meskipun 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 bisa sulit didiagnosis, terutama jika tidak ada pesan kesalahan yang berarti 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 Windows Phone Silverlight 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 hal apa pun) atau setengahnya Anda tidak menghapus. Ulangi proses dengan memisahkan setengah yang berisi kesalahan, dan sebagainya, sampai Anda telah 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>

Memecahkan 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
Pengurai atau pengkompilasi XAML memberikan kesalahan "Nama "<typename>" tidak ada di namespace [...]." Jika <typename> adalah jenis kustom, dalam deklarasi awalan namespace Anda di markup XAML, ubah "clr-namespace" menjadi "using", dan remove any assembly tokens. Untuk jenis platform, ini berarti bahwa jenis tidak berlaku untuk Platform Windows Universal (UWP), jadi temukan yang setara dan perbarui markup Anda. Contoh yang mungkin Anda temui segera adalah phone:PhoneApplicationPage dan shell:SystemTray.IsVisible.
Pengurai atau pengkompilasi XAML memberikan kesalahan "Anggota "<nama> anggota" tidak dikenali atau tidak dapat diakses." atau "Properti "<propertyname>" tidak ditemukan dalam tipe [...].". Kesalahan ini akan mulai muncul setelah Anda memindahkan beberapa nama jenis, seperti Halaman akar. Anggota atau properti tidak berlaku untuk UWP, jadi temukan yang setara dan perbarui markup Anda. Contoh yang mungkin Anda temui segera adalah SupportedOrientations dan Orientation.
Pengurai atau pengkompilasi XAML memberikan kesalahan "Properti yang dapat dilampirkan [...] tidak ditemukan [...]." atau "Anggota yang dapat dilampirkan tidak diketahui [...].". Ini kemungkinan disebabkan oleh jenis daripada properti terlampir; dalam hal ini, Anda sudah akan memiliki kesalahan untuk jenis tersebut dan kesalahan ini akan hilang setelah Anda memperbaikinya. Contoh yang mungkin Anda temui segera adalah phone:PhoneApplicationPage.Resources dan phone:PhoneApplicationPage.DataContext.
Pengurai XAML atau pengkompilasi, atau pengecualian runtime, memberikan kesalahan "Resource "<resourcekey>" tidak dapat diselesaikan.". Kunci sumber daya tidak berlaku untuk aplikasi Platform Windows Universal (UWP). Temukan sumber daya yang setara dengan benar dan perbarui markup Anda. Contoh yang mungkin Anda temui segera adalah kunci Gaya TextBlock sistem seperti PhoneTextNormalStyle.
Pengkompilasi C# memberikan kesalahan "Nama 'nama><' tipe atau namespace layanan tidak dapat ditemukan [...]" atau "Nama nama tipe atau namespace>< tidak ada di namespace [...]" atau "Nama tipe atau namespace<> layanan tidak ada dalam konteks saat ini". Ini kemungkinan berarti bahwa pengkompilasi belum mengetahui namespace UWP yang benar untuk jenis. Gunakan perintah Atasi Visual Studio untuk memperbaikinya.
Jika API tidak berada dalam set API yang dikenal sebagai keluarga perangkat universal (dengan kata lain, API diimplementasikan dalam SDK ekstensi), maka gunakan SDK Ekstensi.
Mungkin ada kasus lain di mana port kurang mudah. Contoh yang mungkin Anda temui segera adalah DesignerProperties dan BitmapImage.
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 lain) 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.
Kesalahan XamlCompiler WMC0055: Tidak dapat menetapkan nilai teks '<geometri> aliran Anda' ke dalam properti 'Klip' jenis 'RectangleGeometry' Di UWP, jenis aplikasi UWP Microsoft DirectX dan XAML C++.
Kesalahan XamlCompiler WMC0001: Tipe 'RadialGradientBrush' yang tidak diketahui di namespace XML [...] UWP tidak memiliki jenis RadialGradientBrush . Hapus RadialGradientBrush dari markup dan gunakan beberapa jenis aplikasi UWP Microsoft DirectX dan XAML C++ lainnya.
Kesalahan XamlCompiler WMC0011: Anggota 'OpacityMask' yang tidak diketahui pada elemen '<UIElement type>' Aplikasi UWP Microsoft DirectX dan XAML C++ UWP.
Pengecualian kesempatan pertama dari jenis 'System.Runtime.InteropServices.COMException' terjadi di SYSTEM. NI.DLL. Informasi tambahan: Aplikasi ini disebut antarmuka yang di-marshalled untuk utas yang berbeda. (Pengecualian dari HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)). Pekerjaan yang Anda lakukan perlu dilakukan pada utas UI. Hubungi CoreWindow.GetForCurrentThread).
Animasi sedang berjalan, tetapi tidak berpengaruh pada properti targetnya. Buat animasi independen, atau atur EnableDependentAnimation="True" di atasnya. Lihat Animasi.
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) berbagi file dan elemen xaml.cs yang sama memiliki atribut x:Name yang tidak konsisten di antara dua file xaml. Coba tambahkan nama yang sama ke elemen yang sama dalam kedua file xaml, atau hilangkan nama sama sekali.

Topik berikutnya adalah Porting XAML dan UI.