Qual è la differenza tra un progetto condiviso e una libreria di classi in Visual Studio 2015?


240

Stavo guardando le nuove funzionalità di Visual Studio 2015 e il progetto condiviso è nato molto, ma non capisco come sia diverso dall'uso di una libreria di classi o di una libreria di classi portatile. Qualcuno può spiegare?

Modifica: il progetto condiviso è una nuova funzionalità di Visual Studio 2015 ed è diverso da una libreria di classi portatile. Capisco cos'è una Portable Class Library. Quello che sto cercando di capire è come un progetto condiviso differisce da una libreria di classi. Vedi link sotto.

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


Risposte:


238

La differenza tra un progetto condiviso e una libreria di classi è che quest'ultimo è compilato e l'unità di riutilizzo è l'assemblaggio.

Mentre con il primo, l'unità di riutilizzo è il codice sorgente e il codice condiviso è incorporato in ogni assembly che fa riferimento al progetto condiviso.

Ciò può essere utile quando si desidera creare assembly separati destinati a piattaforme specifiche ma che dispongono ancora di codice da condividere.

Vedi anche qui :

Il riferimento al progetto condiviso viene visualizzato sotto il nodo Riferimenti in Esplora soluzioni, ma il codice e le risorse nel progetto condiviso vengono trattati come se fossero file collegati al progetto principale.


Nelle versioni precedenti di Visual Studio 1 , era possibile condividere il codice sorgente tra i progetti tramite Aggiungi -> Articolo esistente e quindi scegliendo Collegamento. Ma questo era un po 'goffo e ogni file sorgente separato doveva essere selezionato individualmente. Con il passaggio al supporto di più piattaforme disparate (iOS, Android, ecc.), Hanno deciso di semplificare la condivisione della fonte tra progetti aggiungendo il concetto di Progetti condivisi.


1 Questa domanda e la mia risposta (fino ad ora) suggeriscono che i progetti condivisi erano una nuova funzionalità di Visual Studio 2015. In effetti, hanno fatto il loro debutto in Visual Studio 2013 Update 2


1
Diciamo due progetti che fanno riferimento allo stesso progetto condiviso. Se uno di questi aggiunge un riferimento all'altro, vengono visualizzati errori di dichiarazione del tipo duplicati?
Asad Saeeduddin,

3
@Asad - Non ho controllato, ma non mi aspetto. È possibile avere due tipi distinti, con gli stessi nomi, e dichiarati all'interno degli stessi spazi dei nomi ma esistenti all'interno di assiemi diversi. Questo non è un errore, di per sé.
Damien_The_Unbeliever,

Ho avuto la stessa identica domanda dell'OP nel 2017, ma dal momento che abbiamo .net standard 2.0 ora. I progetti condivisi non sono ormai obsoleti? Se crei oggi una nuova app web o un'app uwp?
JP Hellemons,

1
@JPHellemons - .net standard è buono - ma se hai bisogno di uscire da quello per qualsiasi motivo (es. Se ci sono funzionalità disponibili solo su piattaforme specifiche ), un progetto condiviso potrebbe comunque essere un approccio decente.
Damien_The_Unbeliever

1
Diciamo che con un progetto condiviso possiamo condividere file Javascript. Come lo usiamo in bundleConfig?
Leth,

34

Ho trovato alcune informazioni in più da questo blog .

  • In una libreria di classi, quando viene compilato il codice, vengono generati assembly (dll) per ciascuna libreria. Ma con Progetto condiviso non conterrà alcuna informazione di intestazione, quindi quando si ha un riferimento a Progetto condiviso verrà compilato come parte dell'applicazione padre. Non verranno create DLL separate.
  • Nella libreria di classi ti è permesso solo scrivere codice C # mentre il progetto condiviso può avere qualsiasi cosa come file di codice C #, file XAML o file JavaScript ecc.

7
una libreria di classi può avere anche .xaml (controlli utente)
Default

21

Le differenze in breve sono

1) PCL non avrà pieno accesso a .NET Framework, dove ha SharedProject.

2) #ifdef per codice specifico della piattaforma: non è possibile scrivere in PCL ( l'opzione #ifdef non è disponibile in un PCL perché è compilata separatamente, come la sua DLL, quindi al momento della compilazione (quando viene valutato #ifdef) non sa di quale piattaforma farà parte. ) dove puoi partecipare come progetto condiviso.

3) Il codice specifico della piattaforma viene ottenuto utilizzando Inversion Of Control in PCL, dove utilizzando le istruzioni #ifdef è possibile ottenere lo stesso in Progetto condiviso.

Un eccellente articolo che illustra le differenze tra PCL e progetto condiviso è disponibile al seguente link

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


18

Come altri hanno già scritto, in breve:


riutilizzo del progetto condiviso a livello di codice (file), consentendo anche la struttura e le risorse delle cartelle

pcl
riutilizzo a livello di assieme

Quello che mi è mancato principalmente delle risposte qui per me sono le informazioni sulla funzionalità ridotta disponibile in un PCL: ad esempio hai limitato le operazioni sui file (mi mancava molta funzionalità di File.IO in un progetto multipiattaforma Xamarin).

Più in dettaglio
progetto condiviso :
+ Può usare #if quando si sceglie come target più piattaforme (ad es. Xamarin iOS, Android, WinPhone)
+ Tutte le funzionalità del framework disponibili per ciascun progetto target (anche se devono essere compilate in modo condizionale)
o Si integra al momento della compilazione
- Dimensioni leggermente più grandi degli assembly risultanti
- Richiede Visual Studio 2013 Update 2 o successivo

pcl :
+ genera un assembly condiviso
+ utilizzabile con versioni precedenti di Visual Studio (aggiornamento 2 precedente al 2013)
o collegato dinamicamente
- funzionalità lmited (sottoinsieme di tutti i progetti a cui fa riferimento)

Se hai la scelta, consiglierei di andare per un progetto condiviso, è generalmente più flessibile e più potente. Se conosci i tuoi requisiti in anticipo e un PCL può soddisfarli, potresti seguire anche questa strada. PCL impone inoltre una separazione più chiara non consentendo di scrivere codice specifico per la piattaforma (che potrebbe non essere una buona scelta da inserire in un assembly condiviso in primo luogo).

L'obiettivo principale di entrambi è quando si prendono di mira più piattaforme, altrimenti normalmente si userebbe solo un normale progetto libreria / dll.


9

Dal libro VS 2015 succintamente

Progetti condivisi consente la condivisione di codice, risorse e risorse tra più tipi di progetto. Più specificamente, i seguenti tipi di progetto possono fare riferimento e utilizzare progetti condivisi:

  • Console, Windows Form e Windows Presentation Foundation.
  • App di Windows Store 8.1 e app di Windows Phone 8.1.
  • App Silverlight per Windows Phone 8.0 / 8.1.
  • Librerie di classi portatili.

Nota: - Sia i progetti condivisi che le librerie di classi portatili (PCL) consentono la condivisione di codice, risorse XAML e risorse, ma ovviamente ci sono alcune differenze che potrebbero essere riassunte come segue.

  • Un progetto condiviso non produce un assieme riutilizzabile, quindi può essere utilizzato solo all'interno della soluzione.
  • Un progetto condiviso supporta il codice specifico della piattaforma, poiché supporta variabili di ambiente come WINDOWS_PHONE_APP e WINDOWS_APP che è possibile utilizzare per rilevare su quale piattaforma è in esecuzione il codice.
  • Infine, i progetti condivisi non possono avere dipendenze da librerie di terze parti.
  • In confronto, un PCL produce una libreria .dll riutilizzabile e può avere dipendenze da librerie di terze parti, ma non supporta le variabili di ambiente della piattaforma

7

La libreria di classi è un codice compilato condiviso.

Il progetto condiviso è un codice sorgente condiviso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.