Was ist der Unterschied zwischen einem freigegebenen Projekt und einer Klassenbibliothek in Visual Studio 2015?


240

Ich habe mir die neuen Funktionen für Visual Studio 2015 und Shared Project angesehen, aber ich verstehe nicht, wie sich die Verwendung einer Klassenbibliothek oder einer tragbaren Klassenbibliothek unterscheidet. Kann jemand erklären?

Bearbeiten: Freigegebenes Projekt ist eine neue Funktion in Visual Studio 2015 und unterscheidet sich von einer tragbaren Klassenbibliothek. Ich verstehe, was eine tragbare Klassenbibliothek ist. Ich versuche zu verstehen, wie sich ein freigegebenes Projekt von einer Klassenbibliothek unterscheidet. Siehe Link unten.

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


Antworten:


238

Der Unterschied zwischen einem gemeinsam genutzten Projekt und einer Klassenbibliothek besteht darin, dass letztere kompiliert wird und die Einheit der Wiederverwendung die Assembly ist.

Während bei ersteren die Wiederverwendungseinheit der Quellcode ist und der gemeinsam genutzte Code in jede Assembly integriert ist, die auf das gemeinsam genutzte Projekt verweist.

Dies kann nützlich sein, wenn Sie separate Assemblys erstellen möchten, die auf bestimmte Plattformen abzielen , aber dennoch Code enthalten, der gemeinsam genutzt werden soll.

Siehe auch hier :

Die Referenz für freigegebene Projekte wird im Projektmappen-Explorer unter dem Knoten Verweise angezeigt, aber der Code und die Assets im freigegebenen Projekt werden so behandelt, als wären sie Dateien, die mit dem Hauptprojekt verknüpft sind.


In früheren Versionen von Visual Studio 1 konnten Sie den Quellcode zwischen Projekten freigeben, indem Sie Hinzufügen -> Vorhandenes Element hinzufügen und dann Verknüpfung auswählen. Dies war jedoch etwas umständlich und jede einzelne Quelldatei musste einzeln ausgewählt werden. Mit der Unterstützung mehrerer unterschiedlicher Plattformen (iOS, Android usw.) beschlossen sie, die gemeinsame Nutzung von Quellen zwischen Projekten zu vereinfachen, indem sie das Konzept der gemeinsam genutzten Projekte hinzufügten.


1 Diese Frage und meine Antwort (bis jetzt) ​​legen nahe, dass Shared Projects eine neue Funktion in Visual Studio 2015 war. Tatsächlich haben sie ihr Debüt in Visual Studio 2013 Update 2 gegeben


1
Angenommen, zwei Projekte verweisen auf dasselbe gemeinsame Projekt. Wenn einer von diesen einen Verweis auf den anderen hinzufügt, erhalten Sie doppelte Typdeklarationsfehler?
Asad Saeeduddin

3
@Asad - Ich habe nicht überprüft, aber ich würde nicht erwarten. Sie können zwei verschiedene Typen mit denselben Namen haben, die in denselben Namespaces deklariert sind, aber in verschiedenen Assemblys vorhanden sind. Das ist an sich kein Fehler.
Damien_The_Unbeliever

Ich hatte genau die gleiche Frage wie das OP im Jahr 2017, aber da wir jetzt .net Standard 2.0 haben . Sind geteilte Projekte nicht veraltet? Wenn Sie heute eine brandneue Webapp oder UWP-App erstellen würden?
JP Hellemons

1
@JPHellemons - .net-Standard ist gut - aber wenn Sie aus irgendeinem Grund darüber hinausgehen müssen (z. B. wenn Funktionen nur auf bestimmten Plattformen verfügbar sind), kann ein gemeinsames Projekt immer noch ein anständiger Ansatz sein.
Damien_The_Unbeliever

1
Wir sagen, dass wir mit einem gemeinsamen Projekt Javascript-Dateien teilen können. Wie verwenden wir das in einer bundleConfig?
Leth

34

Ich habe weitere Informationen in diesem Blog gefunden .

  • In einer Klassenbibliothek werden beim Kompilieren von Code Assemblys (DLLs) für jede Bibliothek generiert. Bei Shared Project enthält es jedoch keine Header-Informationen. Wenn Sie also eine Shared Project-Referenz haben, werden diese als Teil der übergeordneten Anwendung kompiliert. Es werden keine separaten DLLs erstellt.
  • In der Klassenbibliothek dürfen Sie nur C # -Code schreiben, während gemeinsam genutzte Projekte C # -Code-Dateien, XAML-Dateien oder JavaScript-Dateien usw. enthalten können.

7
Eine Klassenbibliothek kann auch .xaml haben (Benutzersteuerelemente)
Standard

21

Kurz Unterschiede sind

1) PCL hat keinen vollständigen Zugriff auf .NET Framework, wie dies bei SharedProject der Fall ist.

2) #ifdef für plattformspezifischen Code - Sie können nicht in PCL schreiben ( die Option #ifdef steht Ihnen in einer PCL nicht zur Verfügung, da sie separat als eigene DLL kompiliert wird, also zur Kompilierungszeit (wenn #ifdef ausgewertet wird). Es weiß nicht, zu welcher Plattform es gehören wird. ) Wo können Sie als gemeinsames Projekt.

3) Plattformspezifischer Code wird mit Inversion Of Control in PCL erreicht, wobei Sie mit # ifdef-Anweisungen dasselbe in Shared Project erreichen können.

Ein ausgezeichneter Artikel, der die Unterschiede zwischen PCL und Shared Project veranschaulicht, finden Sie unter folgendem Link

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


18

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.


9

Aus dem Buch VS 2015 kurz und bündig

Mit freigegebenen Projekten können Code, Assets und Ressourcen für mehrere Projekttypen freigegeben werden. Insbesondere können die folgenden Projekttypen auf gemeinsam genutzte Projekte verweisen und diese verwenden:

  • Konsole, Windows Forms und Windows Presentation Foundation.
  • Windows Store 8.1-Apps und Windows Phone 8.1-Apps.
  • Windows Phone 8.0 / 8.1 Silverlight-Apps.
  • Tragbare Klassenbibliotheken.

Hinweis: - Sowohl gemeinsam genutzte Projekte als auch Portable Class Libraries (PCL) ermöglichen die gemeinsame Nutzung von Code, XAML-Ressourcen und Assets. Natürlich gibt es einige Unterschiede, die wie folgt zusammengefasst werden können.

  • Ein freigegebenes Projekt erzeugt keine wiederverwendbare Baugruppe, sodass es nur innerhalb der Lösung verwendet werden kann.
  • Ein freigegebenes Projekt unterstützt plattformspezifischen Code, da es Umgebungsvariablen wie WINDOWS_PHONE_APP und WINDOWS_APP unterstützt, mit denen Sie erkennen können, auf welcher Plattform Ihr Code ausgeführt wird.
  • Schließlich können gemeinsam genutzte Projekte keine Abhängigkeiten von Bibliotheken von Drittanbietern aufweisen.
  • Im Vergleich dazu erstellt eine PCL eine wiederverwendbare DLL-Bibliothek und kann Abhängigkeiten von Bibliotheken von Drittanbietern aufweisen, unterstützt jedoch keine Plattformumgebungsvariablen

7

Klassenbibliothek ist gemeinsam genutzter kompilierter Code.

Freigegebenes Projekt ist gemeinsam genutzter Quellcode.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.