Apa perbedaan antara Proyek Bersama dan Perpustakaan Kelas di Visual Studio 2015?

240

Saya melihat fitur-fitur baru untuk Visual Studio 2015 dan Proyek Bersama muncul banyak tetapi saya tidak mengerti bagaimana bedanya dengan menggunakan Perpustakaan Kelas atau Perpustakaan Kelas Portabel. Adakah yang bisa menjelaskan?

Sunting: Proyek Bersama adalah fitur baru di Visual Studio 2015 dan berbeda dengan Perpustakaan Kelas Portabel. Saya mengerti apa itu Portable Class Library. Apa yang saya coba pahami adalah bagaimana Proyek Bersama berbeda dengan Perpustakaan Kelas. Lihat tautan di bawah.

http://www.c-sharpcorner.com/UploadFile/7ca517/share-project-an-impressive-features-of-visual-studio-201/

Indy411
sumber

Jawaban:

238

Perbedaan antara proyek bersama dan perpustakaan kelas adalah bahwa yang terakhir dikompilasi dan unit penggunaan kembali adalah perakitan.

Sedangkan dengan yang pertama, unit penggunaan kembali adalah kode sumber, dan kode bersama dimasukkan ke dalam setiap majelis yang merujuk proyek bersama.

Ini bisa berguna ketika Anda ingin membuat majelis terpisah yang menargetkan platform tertentu tetapi masih memiliki kode yang harus dibagikan.

Lihat juga di sini :

Referensi proyek bersama ditampilkan di bawah referensi Referensi di Solution Explorer, tetapi kode dan aset dalam proyek bersama diperlakukan seolah-olah mereka file yang ditautkan ke proyek utama.


Dalam versi Visual Studio 1 sebelumnya , Anda dapat berbagi kode sumber antar proyek dengan Tambah -> Item yang Ada dan kemudian memilih untuk Tautan. Tapi ini agak kikuk dan setiap file sumber terpisah harus dipilih secara individual. Dengan pindah ke mendukung berbagai platform yang berbeda (iOS, Android, dll), mereka memutuskan untuk membuatnya lebih mudah untuk berbagi sumber antar proyek dengan menambahkan konsep Proyek Bersama.


1 Pertanyaan ini dan jawaban saya (sampai sekarang) menunjukkan bahwa Proyek Bersama adalah fitur baru di Visual Studio 2015. Faktanya, mereka membuat debut mereka di Visual Studio 2013 Pembaruan 2

Damien_The_Unbeliever
sumber
1
Katakanlah dua proyek yang merujuk pada proyek bersama yang sama. Jika salah satu dari mereka menambahkan referensi ke yang lain, apakah Anda mendapatkan kesalahan deklarasi tipe duplikat?
Asad Saeeduddin
3
@Asad - Saya belum memeriksa, tapi saya harapkan tidak. Anda dapat memiliki dua jenis berbeda, dengan nama yang sama, dan dideklarasikan di dalam ruang nama yang sama tetapi ada dalam majelis yang berbeda. Itu bukan kesalahan, per se.
Damien_The_Unbeliever
Saya memiliki pertanyaan yang sama persis seperti OP pada 2017 tetapi karena kami memiliki .net standard 2.0 sekarang. Bukankah proyek yang dibagikan sekarang sudah usang? Jika Anda ingin membuat aplikasi webapp atau uwp baru hari ini?
JP Hellemons
1
@ JPHellemons - .net standard bagus - tetapi jika Anda perlu keluar dari itu untuk alasan apa pun (misalnya jika ada fungsi yang hanya tersedia pada platform tertentu ) maka Proyek Bersama masih bisa menjadi pendekatan yang layak.
Damien_The_Unbeliever
1
Kami mengatakan dengan proyek Bersama kami dapat berbagi file Javascript. Bagaimana kita menggunakannya dalam bundleConfig?
Leth
34

Saya menemukan beberapa informasi lebih lanjut dari blog ini .

  • Di Perpustakaan Kelas, ketika kode dikompilasi, rakitan (dll) dihasilkan untuk setiap perpustakaan. Tetapi dengan Proyek Bersama itu tidak akan berisi informasi header sehingga ketika Anda memiliki referensi Proyek Bersama itu akan dikompilasi sebagai bagian dari aplikasi induk. Tidak akan ada dll terpisah yang dibuat.
  • Di perpustakaan kelas Anda hanya diperbolehkan menulis kode C # sementara proyek bersama dapat memiliki hal seperti file kode C #, file XAML atau file JavaScript dll.
Indy411
sumber
7
perpustakaan kelas dapat memiliki .xaml juga (Kontrol Pengguna)
Default
21

Perbedaan Singkat adalah

1) PCL tidak akan memiliki Akses Penuh ke .NET Framework, seperti yang dimiliki SharedProject.

2) #ifdef untuk kode khusus platform - Anda tidak dapat menulis di PCL ( opsi #ifdef tidak tersedia untuk Anda di PCL karena dikompilasi secara terpisah, sebagai DLL sendiri, jadi pada waktu kompilasi (ketika #ifdef dievaluasi) tidak tahu platform apa yang akan menjadi bagiannya. ) di mana sebagai proyek Bersama Anda dapat.

3) Kode spesifik platform dicapai menggunakan Inversion Of Control di PCL, di mana dengan menggunakan pernyataan #ifdef Anda dapat mencapai hal yang sama di Proyek Bersama.

Artikel yang sangat bagus yang menggambarkan perbedaan antara PCL vs Proyek Bersama dapat ditemukan di tautan berikut

http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-share-project/

Venkataramana Madugula
sumber
18

Seperti yang sudah ditulis orang lain, singkatnya:

proyek bersama
digunakan kembali pada level kode (file), memungkinkan untuk struktur folder dan sumber daya juga

hal
digunakan kembali pada tingkat perakitan

Apa yang sebagian besar hilang dari jawaban di sini bagi saya adalah info tentang penurunan fungsionalitas yang tersedia di PCL: sebagai contoh Anda memiliki operasi file yang terbatas (saya kehilangan banyak fungsi File.IO dalam proyek lintas platform Xamarin).

Dalam
proyek bersama yang lebih detail :
+ Dapat menggunakan #jika menargetkan beberapa platform (misalnya Xamarin iOS, Android, WinPhone)
+ Semua fungsionalitas kerangka kerja yang tersedia untuk setiap proyek target (meskipun harus dikompilasi secara kondisional)
o Terintegrasi pada waktu kompilasi
- Ukuran sedikit lebih besar majelis yang dihasilkan
- Membutuhkan Visual Studio 2013 Pembaruan 2 atau lebih tinggi

pcl :
+ menghasilkan perakitan bersama
+ dapat digunakan dengan versi Visual Studio yang lama (Pembaruan pra-2013 2)
o ditautkan secara dinamis
- fungsionalitas yang sesuai (subset dari semua proyek yang sedang dirujuk oleh)

Jika Anda punya pilihan, saya akan merekomendasikan pergi untuk proyek bersama, umumnya lebih fleksibel dan lebih kuat. Jika Anda mengetahui persyaratan Anda sebelumnya dan PCL dapat memenuhinya, Anda mungkin pergi ke rute itu juga. PCL juga memberlakukan pemisahan yang lebih jelas dengan tidak mengizinkan Anda untuk menulis kode khusus platform (yang mungkin bukan pilihan yang baik untuk dimasukkan ke dalam perakitan bersama di tempat pertama).

Fokus utama keduanya adalah ketika Anda menargetkan beberapa platform, selain itu Anda biasanya hanya menggunakan proyek perpustakaan / dll.

Andreas Reiff
sumber
9

Dari buku VS 2015 berhasil

Proyek Bersama memungkinkan kode berbagi, aset, dan sumber daya di berbagai jenis proyek. Lebih khusus, jenis proyek berikut dapat merujuk dan mengkonsumsi proyek bersama:

  • Konsol, Formulir Windows, dan Windows Presentation Foundation.
  • Aplikasi Windows Store 8.1 dan aplikasi Windows Phone 8.1.
  • Windows Phone 8.0 / 8.1 Aplikasi Silverlight.
  • Perpustakaan Kelas Portable.

Catatan: - Baik proyek bersama dan perpustakaan kelas portabel (PCL) memungkinkan kode berbagi, sumber daya XAML, dan aset, tetapi tentu saja ada beberapa perbedaan yang dapat diringkas sebagai berikut.

  • Proyek bersama tidak menghasilkan perakitan yang dapat digunakan kembali, sehingga hanya dapat dikonsumsi dari dalam solusi.
  • Proyek bersama memiliki dukungan untuk kode khusus platform, karena mendukung variabel lingkungan seperti WINDOWS_PHONE_APP dan WINDOWS_APP yang dapat Anda gunakan untuk mendeteksi platform yang menjalankan kode Anda.
  • Akhirnya, proyek bersama tidak dapat memiliki ketergantungan pada perpustakaan pihak ketiga.
  • Sebagai perbandingan, PCL menghasilkan pustaka .dll yang dapat digunakan kembali dan dapat memiliki dependensi pada pustaka pihak ketiga, tetapi itu tidak mendukung variabel lingkungan platform
Tilak
sumber
7

Pustaka kelas adalah kode kompilasi yang dibagikan.

Proyek bersama adalah kode sumber bersama.

Shadi Namrouti
sumber