Wie andere bereits geschrieben haben, kurz gesagt:
Wiederverwendung von gemeinsam genutzten Projekten auf Code- (Datei-) Ebene, wobei auch Ordnerstruktur und Ressourcen berücksichtigt werden
pcl
Wiederverwendung auf Baugruppenebene
Was mir hier in den Antworten am meisten gefehlt hat, sind die Informationen zu reduzierten Funktionen, die in einer PCL verfügbar sind: Als Beispiel haben Sie eingeschränkte Dateivorgänge (mir fehlte in einem plattformübergreifenden Xamarin-Projekt viel File.IO-Funktionalität).
Im Detail
freigegebenes Projekt :
+ Kann #if verwenden, wenn auf mehrere Plattformen (z. B. Xamarin iOS, Android, WinPhone) abgezielt wird.
+ Alle für jedes Zielprojekt verfügbaren Framework-Funktionen (müssen jedoch bedingt kompiliert werden).
O Integriert zur Kompilierungszeit
- Etwas größer der resultierenden Assemblys
- Benötigt Visual Studio 2013 Update 2 oder höher
pcl :
+ erzeugt ein freigegebene Assembly
+ verwendbar mit älteren Versionen von Visual Studio (pre-2013 Update 2)
o dynamisch gelinkt
- lmited Funktionalität (Teilmenge aller Projekte durch verwiesen wird)
Wenn Sie die Wahl haben, würde ich empfehlen, sich für ein gemeinsames Projekt zu entscheiden. Es ist im Allgemeinen flexibler und leistungsfähiger. Wenn Sie Ihre Anforderungen im Voraus kennen und eine PCL diese erfüllen kann, können Sie auch diesen Weg gehen. PCL erzwingt auch eine klarere Trennung, indem es Ihnen nicht erlaubt, plattformspezifischen Code zu schreiben (was möglicherweise keine gute Wahl ist, um überhaupt in eine gemeinsam genutzte Assembly eingefügt zu werden).
Das Hauptaugenmerk von beiden liegt auf der Ausrichtung auf mehrere Plattformen, andernfalls würden Sie normalerweise nur ein gewöhnliches Bibliotheks- / DLL-Projekt verwenden.