Bagikan melalui


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):

Add New Project Dialog

2. Dalam dialog Proyek Platform Windows Universal Baru, pilih versi minimum dan target Windows 10 yang akan dijalankan aplikasi:

New Universal Windows Platform Project Dialog

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:

Configuration Manager Window

5. Klik kanan pada proyek dan pilih Tambahkan > Referensi dan buat referensi ke Xamarin.Forms proyek aplikasi (.NET Standard atau Proyek Bersama).

Reference Manager Dialog

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