Menyiapkan Proyek Windows
Menambahkan proyek Windows baru ke solusi yang sudah ada Xamarin.Forms
Solusi lama Xamarin.Forms (atau yang dibuat di macOS) tidak akan memiliki proyek aplikasi Platform Windows Universal (UWP). Oleh karena itu, Anda harus menambahkan proyek UWP secara manual untuk membangun aplikasi Windows 10 (UWP).
Menambahkan aplikasi Platform Windows Universal
Visual Studio 2019 di Windows 10 disarankan untuk membangun aplikasi UWP. Untuk informasi selengkapnya tentang Platform Windows Universal, lihat Pengantroan ke Platform Windows Universal.
UWP tersedia dalam Xamarin.Forms 2.1 dan yang lebih baru, dan Xamarin.Forms.Peta didukung di Xamarin.Forms 2.2 dan yang lebih baru.
Periksa bagian pemecahan masalah untuk tips bermanfaat.
Ikuti instruksi berikut untuk menambahkan aplikasi UWP yang akan berjalan di ponsel, tablet, dan desktop Windows 10:
1. Klik kanan pada solusi dan pilih Tambahkan > Proyek Baru... dan tambahkan proyek Aplikasi Kosong (Universal Windows):
2. Dalam dialog Proyek Platform Windows Universal Baru, pilih versi minimum dan target Windows 10 yang akan dijalankan aplikasi:
3. Klik kanan pada proyek UWP dan pilih Kelola Paket NuGet... dan tambahkan Xamarin.Forms paket. Pastikan proyek lain dalam solusi juga diperbarui ke versi paket yang Xamarin.Forms sama.
4. Pastikan proyek UWP baru akan dibangun di jendela Build > Configuration Manager (ini mungkin tidak akan terjadi secara default). Centang kotak Bangun dan Sebarkan untuk proyek Universal:
5. Klik kanan pada proyek dan pilih Tambahkan > Referensi dan buat referensi ke Xamarin.Forms proyek aplikasi (.NET Standard atau Proyek Bersama).
6. Dalam proyek UWP, edit App.xaml.cs untuk menyertakan Init
panggilan metode di dalam OnLaunched
metode sekitar baris 52:
// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter
7. Dalam proyek UWP, edit MainPage.xaml dengan menghapus yang Grid
terkandung dalam Page
elemen .
8. Di MainPage.xaml, tambahkan entri baru xmlns
untuk Xamarin.Forms.Platform.UWP
:
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
9. Di MainPage.xaml, ubah elemen root <Page
menjadi <forms:WindowsPage
:
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>
10. Dalam proyek UWP, edit MainPage.xaml.cs untuk menghapus penentu : Page
warisan untuk nama kelas (karena sekarang akan diwarisi karena WindowsPage
perubahan yang dilakukan pada langkah sebelumnya):
public sealed partial class MainPage // REMOVE ": Page"
11. Di MainPage.xaml.cs, tambahkan LoadApplication
panggilan di MainPage
konstruktor untuk memulai Xamarin.Forms aplikasi:
// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());
Catatan
Argumen untuk LoadApplication
metode ini adalah instans yang Xamarin.Forms.Application
ditentukan dalam proyek standar .NET Anda.
12. Tambahkan sumber daya lokal apa pun (misalnya file gambar) dari proyek platform yang ada yang diperlukan.
Pemecahan Masalah
"Pengecualian Pemanggilan Target" saat menggunakan "Kompilasi dengan rantai alat Asli .NET"
Jika aplikasi UWP Anda mereferensikan beberapa rakitan (misalnya pustaka kontrol pihak ketiga, atau aplikasi Anda sendiri dibagi menjadi beberapa pustaka), Xamarin.Forms mungkin tidak dapat memuat objek dari rakitan tersebut (seperti perender kustom).
Ini mungkin terjadi saat menggunakan rantai alat Compile with .NET Native yang merupakan opsi untuk aplikasi UWP di jendela Properties > Build > General untuk proyek.
Anda dapat memperbaikinya dengan menggunakan kelebihan panggilan Forms.Init
khusus UWP di App.xaml.cs seperti yang ditunjukkan pada kode di bawah ini (Anda harus mengganti ClassInOtherAssembly
dengan kelas aktual referensi kode Anda):
// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();
// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);
// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);
Tambahkan entri untuk setiap rakitan yang telah Anda tambahkan sebagai referensi di Penjelajah Solusi, baik melalui referensi langsung atau NuGet.
Layanan Dependensi dan Kompilasi Asli .NET
Build rilis menggunakan kompilasi .NET Native dapat gagal menyelesaikan layanan dependensi yang ditentukan di luar aplikasi utama yang dapat dieksekusi (seperti dalam proyek atau pustaka terpisah).
DependencyService.Register<T>()
Gunakan metode untuk mendaftarkan kelas layanan dependensi secara manual. Berdasarkan contoh di atas, tambahkan metode register seperti ini:
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this