Чим відрізняється спільний проект від бібліотеки класів у Visual Studio 2015?


240

Я дивився на нові функції для Visual Studio 2015 і спільного проекту, але я не розумію, чим це відрізняється від використання бібліотеки класів або портативної бібліотеки класів. Хтось може пояснити?

Редагувати: Спільний проект - це нова функція в Visual Studio 2015 і відрізняється від бібліотеки портативних класів. Я розумію, що таке бібліотека портативних класів. Я намагаюся зрозуміти, як спільний проект відрізняється від бібліотеки класів. Дивіться посилання нижче.

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


Відповіді:


238

Різниця між спільним проектом і бібліотекою класів полягає в тому, що останній складається і одиницею повторного використання є збірка.

Тоді як для першого, одиницею повторного використання є вихідний код, а загальний код включений у кожну збірку, що посилається на спільний проект.

Це може бути корисно, коли ви хочете створити окремі збірки, орієнтовані на певні платформи, але все ще мають код, яким слід ділитися.

Дивіться також тут :

Посилання на спільний проект відображається під вузлом References в Провіднику рішень, але код і активи в спільному проекті трактуються так, ніби вони були файлами, пов'язаними з основним проектом.


У попередніх версіях Visual Studio 1 ви можете поділитися вихідним кодом між проектами, додавши Додати -> Існуючий елемент, а потім вибрати Посилання. Але це було якось незграбно, і кожен окремий вихідний файл повинен був вибиратися індивідуально. З переходом на підтримку декількох різних платформ (iOS, Android тощо) вони вирішили полегшити обмін джерелами між проектами, додавши концепцію спільних проектів.


1 Це запитання та моя відповідь (до цих пір) говорять про те, що спільні проекти були новою функцією у Visual Studio 2015. Насправді вони дебютували в Visual Studio 2013 Update 2


1
Скажімо, два проекти, які посилаються на той самий спільний проект. Якщо один із них додає посилання на інший, чи отримуєте ви повторювані помилки декларування типу?
Asad Saeeduddin

3
@Asad - Я не перевірив, але сподівався би, що не. Ви можете мати два різних типи з однаковими іменами та оголошені всередині одних і тих же просторів імен, але наявні в різних збірках. Це не помилка, сама по собі.
Damien_The_Unbeliever

У мене було те саме питання, що і в ОП у 2017 році, але оскільки у нас є .net стандарт 2.0 . Невже спільні проекти зараз не застаріли? Якби ви створили абсолютно новий додаток webapp або uwp сьогодні?
JP Hellemons

1
@JPHellemons - .net стандарт хороший - але якщо вам потрібно вийти за рамки цього з будь-якої причини (наприклад, якщо функціональність доступна лише на певних платформах), то спільний проект все-таки може бути гідним підходом.
Damien_The_Unbeliever

1
Ми кажемо, що спільним проектом ми можемо ділитися файлами Javascript. Як ми використовуємо це в bundleConfig?
Лет

34

Я знайшов ще трохи інформації з цього блогу .

  • У бібліотеці класів при складанні коду для кожної бібліотеки формуються збірки (dlls). Але в Shared Project він не буде містити будь-якої інформації заголовка, тому коли у вас є посилання на Shared Project, вона буде складена як частина батьківського додатку. Не буде створено окремих dll.
  • У бібліотеці класів ви можете писати код C # лише тоді, коли спільний проект може мати будь-які речі, такі як файли коду C #, файли XAML або файли JavaScript тощо.

7
бібліотека класів може також мати .xaml (User Controls)
Типово

21

Короткі відмінності є

1) PCL не матиме повного доступу до .NET Framework, де є SharedProject.

2) #ifdef для певного коду платформи - ви не можете писати в PCL ( опція #ifdef недоступна для вас у PCL, оскільки вона складається окремо, як власна DLL, тому під час компіляції (коли #ifdef оцінюється) не знає, на якій платформі вона буде частиною. ) де як проект спільного доступу ви можете.

3) Код конкретної платформи досягається за допомогою Inversion Of Control в PCL, де, як за допомогою операторів #ifdef, ви можете досягти того ж у Shared Project.

Чудову статтю, яка ілюструє відмінності між PCL та Shared Project, можна знайти за наступним посиланням

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


18

Як і інші писали, коротше:

спільне
повторне використання проекту на рівні коду (файлу), що забезпечує структуру папок та ресурси

pcl
повторне використання на рівні складання

Чого здебільшого мені бракувало відповідей, - це інформація про зменшені функціональні можливості, доступні в PCL: як приклад, ви маєте обмежені файлові операції (мені бракувало багато функціональності File.IO в кросплатформенному проекті Xamarin).

Більш детально
спільний проект :
+ Може використовувати #if при націлюванні на декілька платформ (наприклад, Xamarin iOS, Android, WinPhone)
+ Усі функціональні можливості рамки, доступні для кожного цільового проекту (хоча повинні бути умовно складені)
o Інтегрується під час компіляції
- Трохи більший розмір отриманих збірок
- Потрібно Visual Studio 2013, оновлення 2 або новішої версії

ПКЛО :
+ генерує загальний вузол
+ може використовуватися з більш старими версіями Visual Studio (попередньо 2013 Update 2)
про динамічно підключається
- lmited функціональності (підмножина всіх проектів , які він в даний час посилається)

Якщо у вас є вибір, я б рекомендував піти на спільний проект, він, як правило, більш гнучкий і потужніший. Якщо ви заздалегідь знаєте свої вимоги і PCL може їх виконати, ви також можете піти цим маршрутом. PCL також забезпечує чіткіше розділення, не дозволяючи писати специфічний для платформи код (що може бути не найкращим вибором для того, щоб в першу чергу ставитись у спільну збірку).

Основна увага в обох - це націлювання на кілька платформ, інакше ви зазвичай використовуєте просто звичайний проект бібліотеки / dll.


9

З книги VS 2015 стисло

Спільні проекти дозволяють ділитися кодом, активами та ресурсами для кількох типів проектів. Більш конкретно, наступні типи проектів можуть посилатись та споживати спільні проекти:

  • Консоль, форми Windows та фонд презентацій Windows.
  • Програми Windows Store 8.1 та додатки Windows Phone 8.1.
  • Програми Windows Phone 8.0 / 8.1 Silverlight.
  • Переносні бібліотеки класів.

Примітка: - І спільні проекти, і бібліотеки портативних класів (PCL) дозволяють ділитися кодом, ресурсами XAML та ресурсами, але, звичайно, є деякі відмінності, які можуть бути зведені наступним чином.

  • Спільний проект не створює багаторазову збірку, тому його можна споживати лише в межах рішення.
  • Спільний проект має підтримку коду для платформи, оскільки він підтримує змінні середовища, такі як WINDOWS_PHONE_APP та WINDOWS_APP, які ви можете використовувати для виявлення, на якій платформі працює ваш код.
  • Нарешті, спільні проекти не можуть залежати від сторонніх бібліотек.
  • Для порівняння, PCL виробляє багаторазову бібліотеку .dll і може мати залежність від сторонніх бібліотек, але вона не підтримує змінні середовища платформи

7

Бібліотека класів спільно зібраний код.

Спільний проект - це спільний вихідний код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.