В чем разница между общим проектом и библиотекой классов в Visual Studio 2015?

Я смотрел на новые функции для Visual Studio 2015 и общий проект придумал много, но я не понимаю, как это отличается от использования библиотеки классов или портативной библиотеки классов. Кто-нибудь может объяснить?

Edit: общий проект является новой функцией в Visual Studio 2015 и отличается от переносимой библиотеки классов. Я понимаю, что такое портативная библиотека классов. Я пытаюсь понять, как общий проект отличается от библиотеки классов. Ссылка под.

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

5 ответов


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

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

Это может быть полезно, если вы хотите создать отдельные сборки, целевые конкретные платформы, но все еще имеют код, который должен быть общий.

см. также здесь:

ссылка на общий проект отображается под узлом ссылки в обозревателе решений, но код и ресурсы в общем проекте рассматриваются как файлы, связанные с основным проектом.


в предыдущих версиях Visual Studio1, вы можете совместно использовать исходный код между проектами, добавив - > существующий элемент, а затем выбрав ссылку. Но это было clunky и каждый отдельный исходный файл должны были быть выбраны индивидуально. С переходом на поддержку нескольких разрозненных платформ (iOS, Android и т. д.) Они решили упростить обмен источниками между проектами, добавив концепцию общих проектов.


1 этот вопрос и мой ответ (до сих пор) предполагают, что общие проекты были новой функцией в Visual Studio 2015. Фактически, они дебютировали в Обновление Visual Studio 2013 2


Я нашел дополнительную информацию из этого блог.

  • в библиотеке классов при компиляции кода для каждой библиотеки создаются сборки (DLL). Но с общим проектом он не будет содержать никакой информации заголовка, поэтому, когда у вас есть ссылка на общий проект, он будет скомпилирован как часть родительского приложения. Отдельные библиотеки DLL создаваться не будут.
  • в библиотеке классов вам разрешено писать только код C#, в то время как общий проект может иметь любая вещь, как файлы кода C#, файлы XAML или файлы JavaScript и т. д.

в-короткие различия являются

1) PCL не будет иметь полного доступа к .NET Framework, где, как SharedProject.

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

3) платформы конкретный код достигается с помощью инверсии управления в PCL, где, используя операторы #ifdef, вы можете достичь того же в общем проекте.

отличная статья, которая иллюстрирует различия между PCL и общим проектом, можно найти по следующей ссылке

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


как другие уже писали, короче:

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

pcl
повторное использование на уровне сборки

что в основном отсутствовало в ответах здесь для меня, это информация о сниженной функциональности, доступной в PCL: в качестве примера у вас есть ограниченные файловые операции (мне не хватало много файлов.Функциональность ввода-вывода в Xamarin кросс-платформенный проект).

подробнее
общий проект:
+ Можете использовать #если при ориентации на нескольких платформах (электронная. г. В Xamarin для iOS, Android и WinPhone)
+ Вся функциональность фреймворка доступна для каждого целевого проекта (хотя должна быть условно скомпилирована)
o интегрируется во время компиляции
- Немного больший размер результирующих сборок
- Требуется Visual Studio 2013 с обновлением 2 или выше

pcl:
+ создает общую сборку
+ используется со старыми версиями Visual Studio (до 2013 обновления 2)
о динамически связаны
- lmited функциональность (подмножество всех проектов, на которые он ссылается)

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

основной фокус обоих - это когда вы нацелены на несколько платформ, иначе вы обычно используете только обычный проект библиотеки / dll.


из книги VS 2015 кратко

общие проекты позволяет обмениваться кодом, активами и ресурсами между несколькими типами проектов. Более конкретно, следующие типы проектов могут ссылаться и использовать общие проекты:

  • консоль, Windows Forms и Windows Presentation Foundation.
  • Windows Store 8.1 приложения и Windows Phone 8.1 приложения.
  • Windows Phone 8.0 / 8.1 приложения Silverlight.
  • Портативное Класс Библиотеки.

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

  • общий проект не создает сборку многоразового использования, поэтому его можно использовать только из решения.
  • общий проект поддерживает код, специфичный для платформы, поскольку он поддерживает переменные среды, такие как WINDOWS_PHONE_APP и WINDOWS_APP, которые можно использовать для определения платформы, на которой выполняется код.
  • наконец, общие проекты не могут иметь зависимостей от сторонних библиотек.
  • для сравнения, PCL производит многоразовый .библиотека dll и может иметь зависимости от сторонних библиотек, но не поддерживает переменные среды платформы