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

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

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

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

Ответ 1

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

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

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

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

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


В предыдущих версиях Visual Studio 1 вы могли использовать исходный код между проектами Add → Existing Item, а затем выбрать Link. Но это было довольно неудобно, и каждый отдельный исходный файл должен был быть выбран индивидуально. С переходом на поддержку нескольких разрозненных платформ (iOS, Android и т.д.) Они решили упростить обмен источниками между проектами, добавив концепцию общих проектов.


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

Ответ 2

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

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

Ответ 3

В-коротких различиях

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

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

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

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

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

Ответ 4

Как и другие, уже написаны, короче:

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

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

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

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

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

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

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

Ответ 5

Из книги VS 2015 succintly

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

  • Консоль, 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 и может иметь зависимости от сторонних библиотек, но не поддерживает переменные среды платформы.