Jaka jest różnica między projektem współdzielonym a biblioteką klas w Visual Studio 2015?

240

Przyglądałem się nowym funkcjom Visual Studio 2015 i Shared Project pojawiło się dużo, ale nie rozumiem, czym różni się korzystanie z Biblioteki klas lub Przenośnej biblioteki klas. Czy ktoś może wyjaśnić?

Edycja: Projekt współdzielony to nowa funkcja programu Visual Studio 2015 i różni się od przenośnej biblioteki klas. Rozumiem, czym jest Portable Class Library. Próbuję zrozumieć, czym różni się projekt współdzielony od biblioteki klas. Zobacz link poniżej.

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

Indy411
źródło

Odpowiedzi:

238

Różnica między wspólnym projektem a biblioteką klas polega na tym, że ta ostatnia jest kompilowana, a jednostką ponownego użycia jest zestaw.

W przypadku tych pierwszych jednostką ponownego wykorzystania jest kod źródłowy, a wspólny kod jest dołączany do każdego zestawu, który odwołuje się do wspólnego projektu.

Może to być przydatne, gdy chcesz tworzyć osobne zestawy, które są ukierunkowane na określone platformy, ale nadal mają kod, który należy udostępnić.

Zobacz także tutaj :

Udostępnione odwołanie do projektu pojawia się w węźle Odwołania w Eksploratorze rozwiązań, ale kod i zasoby we współdzielonym projekcie są traktowane tak, jakby były plikami połączonymi z głównym projektem.


W poprzednich wersjach programu Visual Studio 1 można było udostępniać kod źródłowy między projektami, wybierając Dodaj -> Istniejący element, a następnie wybierając opcję Połącz. Ale to było trochę niezgrabne i każdy osobny plik źródłowy musiał być wybierany indywidualnie. Przechodząc do obsługi wielu różnych platform (iOS, Android itp.), Postanowili ułatwić udostępnianie źródła między projektami, dodając koncepcję wspólnych projektów.


1 To pytanie i moja odpowiedź (do tej pory) sugerują, że Shared Projects to nowa funkcja w Visual Studio 2015. W rzeczywistości zadebiutowali w Visual Studio 2013 Update 2

Damien_The_Unbeliever
źródło
1
Powiedzmy, że dwa projekty odnoszą się do tego samego wspólnego projektu. Jeśli jeden z nich dodaje odniesienie do drugiego, czy występują błędy duplikacji deklaracji typu?
Asad Saeeduddin
3
@Asad - nie sprawdziłem, ale nie spodziewałbym się. Możesz mieć dwa różne typy o tych samych nazwach i zadeklarowane w tych samych przestrzeniach nazw, ale istniejących w różnych zestawach. To nie jest błąd sam w sobie.
Damien_The_Unbeliever
Miałem dokładnie to samo pytanie, co OP w 2017 roku, ale odkąd mamy teraz .net standard 2.0 . Czy wspólne projekty nie są już przestarzałe? Jeśli chcesz dzisiaj stworzyć zupełnie nową aplikację internetową lub aplikację uwp?
JP Hellemons,
1
@JPHellemons - standard .net jest dobry - ale jeśli musisz wyjść poza to z jakiegokolwiek powodu (np. Jeśli funkcjonalność jest dostępna tylko na określonych platformach), Projekt Udostępniony może być nadal przyzwoity.
Damien_The_Unbeliever
1
Mówimy, że dzięki wspólnemu projektowi możemy udostępniać pliki JavaScript. Jak tego używamy w pakiecie konfiguracji?
Leth
34

Znalazłem więcej informacji z tego bloga .

  • W bibliotece klas po kompilacji kodu generowane są zestawy (dll) dla każdej biblioteki. Ale w przypadku współdzielonego projektu nie będzie zawierał żadnych informacji nagłówkowych, więc jeśli masz odwołanie do współdzielonego projektu, zostanie ono skompilowane jako część aplikacji nadrzędnej. Nie będą tworzone osobne biblioteki dll.
  • W bibliotece klas można pisać tylko kod C #, podczas gdy projekt współdzielony może zawierać dowolne pliki, takie jak kod C #, pliki XAML lub pliki JavaScript itp.
Indy411
źródło
7
biblioteka klas może również mieć .xaml (Kontrola użytkownika)
Domyślnie
21

Krótkie różnice to

1) PCL nie będzie miał pełnego dostępu do .NET Framework, gdzie ma to jak SharedProject.

2) #ifdef dla kodu specyficznego dla platformy - nie można pisać w PCL ( opcja #ifdef nie jest dostępna w PCL, ponieważ jest ona kompilowana osobno, jako własna biblioteka DLL, więc w czasie kompilacji (podczas oceny #ifdef) nie wie, na jakiej platformie będzie częścią. ) Gdzie, jako wspólny projekt, możesz.

3) Kod specyficzny dla platformy jest uzyskiwany za pomocą Inversion Of Control w PCL, gdzie za pomocą instrukcji #ifdef można osiągnąć to samo w Shared Project.

Doskonały artykuł ilustrujący różnice między PCL a współdzielonym projektem można znaleźć pod następującym linkiem

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

Venkataramana Madugula
źródło
18

Krótko mówiąc, jak inni już pisali:

wspólne korzystanie z projektu
na poziomie kodu (pliku), co pozwala również na strukturę folderów i zasobów

pcl
Ponowne użycie na poziomie zestawu

Najbardziej brakowało mi tutaj odpowiedzi na temat ograniczonej funkcjonalności dostępnej w PCL: jako przykład masz ograniczone operacje na plikach (brakowało mi wielu funkcjonalności File.IO w wieloplatformowym projekcie Xamarin).

Bardziej szczegółowo
współdzielony projekt :
+ Można użyć #if podczas atakowania na wiele platform (np. Xamarin iOS, Android, WinPhone)
+ Wszystkie funkcje frameworku dostępne dla każdego projektu docelowego (choć muszą być kompilowane warunkowo)
o Integruje się w czasie kompilacji
- Nieco większy rozmiar wynikowych zestawów
- Wymaga Visual Studio 2013 Update 2 lub nowszej

pcl :
+ generuje wspólny zestaw
+ nadaje się do użycia ze starszymi wersjami Visual Studio (wersja 2 przed 2013 r.)
o dynamicznie połączony
- ograniczona funkcjonalność (podzbiór wszystkich projektów, do których się odwołuje)

Jeśli masz wybór, polecam pójście na wspólny projekt, jest on na ogół bardziej elastyczny i bardziej wydajny. Jeśli znasz swoje wymagania z wyprzedzeniem, a PCL może je spełnić, możesz również pójść tą drogą. PCL wymusza także wyraźniejszą separację, nie pozwalając na pisanie kodu specyficznego dla platformy (co może nie być dobrym wyborem do umieszczenia we wspólnym zestawie).

Głównym celem obu jest, gdy kierujesz reklamy na wiele platform, w przeciwnym razie zwykle używałbyś zwykłego projektu biblioteki / biblioteki dll.

Andreas Reiff
źródło
9

Z książki VS 2015 trafnie

Projekty współdzielone umożliwiają współdzielenie kodu, zasobów i zasobów dla wielu typów projektów. Mówiąc dokładniej, następujące typy projektów mogą odwoływać się i wykorzystywać projekty współdzielone:

  • Konsola, formularze Windows i Windows Presentation Foundation.
  • Aplikacje Windows Store 8.1 i Windows Phone 8.1.
  • Aplikacje Windows Phone 8.0 / 8.1 Silverlight.
  • Przenośne biblioteki klas.

Uwaga: - Zarówno projekty współdzielone, jak i biblioteki klas przenośnych (PCL) umożliwiają udostępnianie kodu, zasobów XAML i zasobów, ale oczywiście istnieją pewne różnice, które można podsumować w następujący sposób.

  • Współużytkowany projekt nie tworzy zestawu wielokrotnego użytku, więc można go wykorzystać tylko z poziomu rozwiązania.
  • Współużytkowany projekt obsługuje kod specyficzny dla platformy, ponieważ obsługuje zmienne środowiskowe, takie jak WINDOWS_PHONE_APP i WINDOWS_APP, których można użyć do wykrycia platformy, na której działa Twój kod.
  • Wreszcie współdzielone projekty nie mogą być zależne od bibliotek stron trzecich.
  • Dla porównania, PCL tworzy bibliotekę .dll wielokrotnego użytku i może mieć zależności od bibliotek stron trzecich, ale nie obsługuje zmiennych środowiskowych platformy
Tilak
źródło
7

Biblioteka klas jest współdzielonym skompilowanym kodem.

Udostępniony projekt to wspólny kod źródłowy.

Shadi Namrouti
źródło