Bagikan melalui


Gambaran umum kode berbagi

Dokumen ini membandingkan berbagai metode berbagi kode antara proyek lintas platform: .NET Standard, Shared Projects, dan Portable Class Libraries, termasuk manfaat dan kekurangan masing-masing.

Ada tiga metode untuk berbagi kode antara aplikasi lintas platform:

  • Pustaka Standar .NET – Proyek .NET Standard dapat menerapkan kode untuk dibagikan di beberapa platform, dan dapat mengakses sejumlah besar API .NET (tergantung pada versinya). .NET Standard 1.0 - 1.6 menerapkan set API yang semakin besar, sementara .NET Standard 2.0 memberikan cakupan terbaik dari .NET BCL (termasuk API .NET yang tersedia di aplikasi Xamarin).
  • Proyek Bersama – Gunakan jenis Proyek Aset Bersama untuk mengatur kode sumber Anda, dan gunakan #if arahan kompilator sesuai kebutuhan untuk mengelola persyaratan khusus platform.
  • Pustaka Kelas Portabel (tidak digunakan lagi) – Pustaka Kelas Portabel (PCL) dapat menargetkan beberapa platform dengan permukaan API umum, dan menggunakan Antarmuka untuk menyediakan fungsionalitas khusus platform. PCL tidak digunakan lagi dalam versi terbaru Visual Studio - gunakan .NET Standard sebagai gantinya.

Tujuan dari strategi berbagi kode adalah untuk mendukung arsitektur yang ditunjukkan dalam diagram ini, di mana basis kode tunggal dapat digunakan oleh beberapa platform.

Shared code application architecture

Artikel ini membandingkan metode yang tersedia untuk membantu Anda memilih jenis proyek yang tepat untuk aplikasi Anda.

Pustaka Standar .NET

Pustaka .NET Standard menyediakan sekumpulan pustaka kelas dasar yang terdefinisi dengan baik yang dapat direferensikan dalam berbagai jenis proyek, termasuk proyek lintas platform seperti Xamarin.Android dan Xamarin.iOS. .NET Standard 2.0 direkomendasikan untuk kompatibilitas maksimum dengan kode .NET Framework yang ada.

.NET Standard diagram

Keuntungan

  • Memungkinkan Anda berbagi kode di beberapa proyek.
  • Operasi pemfaktoran ulang selalu memperbarui semua referensi yang terpengaruh.
  • Area permukaan yang lebih besar dari .NET Base Class Library (BCL) tersedia daripada profil PCL. Secara khusus, .NET Standard 2.0 memiliki permukaan API yang hampir sama dengan .NET Framework dan direkomendasikan untuk aplikasi baru dan port PCL yang ada.

Kerugian

  • Tidak dapat menggunakan direktif kompilator seperti #if __IOS__.

Keterangan

.NET Standard mirip dengan PCL, tetapi dengan model yang lebih sederhana untuk dukungan platform dan jumlah kelas yang lebih besar dari BCL.

Proyek Bersama

Proyek Bersama berisi file kode dan aset yang disertakan dalam proyek apa pun yang mereferensikannya. Proyek berbagi tidak menghasilkan output yang dikompilasi sendiri.

Cuplikan layar ini menunjukkan file solusi yang berisi tiga proyek aplikasi (untuk Android, iOS, dan Windows), dengan proyek Bersama yang berisi file kode sumber C# umum:

Shared project solution

Arsitektur konseptual ditampilkan dalam diagram berikut, di mana setiap proyek menyertakan semua file sumber bersama:

Shared project diagram

Contoh

Aplikasi lintas platform yang mendukung iOS, Android, dan Windows akan memerlukan proyek aplikasi untuk setiap platform. Kode umum berada di Proyek Bersama.

Contoh solusi akan berisi folder dan proyek berikut (nama proyek telah dipilih untuk ekspresif, proyek Anda tidak perlu mengikuti panduan penamaan ini):

  • Bersama – Proyek Bersama yang berisi kode umum untuk semua proyek.
  • Proyek aplikasi AppAndroid – Xamarin.Android.
  • AppiOS – Proyek aplikasi Xamarin.iOS.
  • AppWindows – Proyek aplikasi Windows.

Dengan cara ini ketiga proyek aplikasi berbagi kode sumber yang sama (file C# di Bersama). Setiap pengeditan pada kode bersama akan dibagikan di ketiga proyek.

Keuntungan

  • Memungkinkan Anda berbagi kode di beberapa proyek.
  • Kode bersama dapat dicabangkan berdasarkan platform menggunakan arahan kompilator (misalnya, menggunakan #if __ANDROID__ , seperti yang dibahas dalam dokumen Membangun Aplikasi Lintas Platform).
  • Proyek aplikasi dapat menyertakan referensi khusus platform yang dapat digunakan kode bersama (seperti menggunakan Community.CsharpSqlite.WP7 dalam sampel Tugas untuk Windows Telepon).

Kerugian

  • Pemfaktoran ulang yang memengaruhi kode di dalam arahan kompilator 'tidak aktif' tidak akan memperbarui kode di dalam arahan tersebut.
  • Tidak seperti kebanyakan jenis proyek lainnya, Proyek Bersama tidak memiliki rakitan 'output'. Selama kompilasi, file diperlakukan sebagai bagian dari proyek referensi dan dikompilasi ke dalam rakitan tersebut. Jika Anda ingin berbagi kode Anda sebagai rakitan, maka .NET Standard atau Portable Class Libraries adalah solusi yang lebih baik.

Keterangan

Solusi yang baik untuk pengembang aplikasi yang menulis kode yang hanya ditujukan untuk berbagi di aplikasi mereka (dan tidak mendistribusikan ke pengembang lain).

Pustaka Kelas Portabel

Tip

Pustaka .NET Standard 2.0 direkomendasikan melalui Pustaka Kelas Portabel.

Pustaka Kelas Portabel dibahas secara rinci di sini.

Portable class library diagram

Keuntungan

  • Memungkinkan Anda berbagi kode di beberapa proyek.
  • Operasi pemfaktoran ulang selalu memperbarui semua referensi yang terpengaruh.

Kerugian

  • Tidak digunakan lagi dalam versi terbaru Visual Studio, pustaka .NET Standard direkomendasikan sebagai gantinya. Lihat penjelasan ini tentang perbedaan antara PCL dan .NET Standard.
  • Tidak dapat menggunakan direktif kompilator.
  • Hanya subset kerangka kerja .NET yang tersedia untuk digunakan, ditentukan oleh profil yang dipilih (lihat Pengenalan PCL untuk informasi selengkapnya).

Keterangan

Templat PCL dianggap tidak digunakan lagi dalam versi terbaru Visual Studio.

Ringkasan

Strategi berbagi kode yang Anda pilih akan didorong oleh platform yang Anda targetkan. Pilih metode yang paling sesuai untuk proyek Anda.

.NET Standard adalah pilihan terbaik untuk membangun pustaka kode yang dapat dibagikan (terutama penerbitan di NuGet). Proyek Bersama berfungsi dengan baik untuk pengembang aplikasi yang berencana menggunakan banyak fungsionalitas khusus platform di aplikasi lintas platform mereka.

Meskipun proyek PCL terus didukung di Visual Studio, .NET Standard direkomendasikan untuk proyek baru.