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

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

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

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

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

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

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

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

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


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


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

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

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

В-Краткие различия

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/

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

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

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

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

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

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

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

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

Из книги VS 2015 succintly

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

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

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

  • Общий проект не создает многоразовую сборку, поэтому ее можно использовать только из решения.
  • Общий проект поддерживает платформенный код, потому что он поддерживает переменные среды, такие как WINDOWS_PHONE_APP и WINDOWS_APP, которые вы можете использовать для определения, на какой платформе работает ваш код.
  • Наконец, общие проекты не могут иметь зависимости от сторонних библиотек.
  • Для сравнения, PCL создает многократно используемую библиотеку DLL и может иметь зависимости от сторонних библиотек, но не поддерживает переменные среды платформы
  • Несколько ошибок Установка Visual Studio 2015 Community Edition
  • Ошибка отладки! Выражение: __acrt_first_block == header
  • Свойство 'map' не существует в типе 'Observable '
  • Ошибка установки Visual Studio 2015 Enterprise Update 1 с Team Explorer
  • VS 2015. Настройка правильной целевой структуры для веб-проекта ASP.NET 5
  • Пакеты не загружаются после установки visual studio 2015 RTM
  • выпадающий список имени имени и имени classа отсутствует (настройка визуальной студии)
  • Пакеты NuGet отсутствуют
  • Ошибка Visual Studio 2015 «Ссылка на объект не установлена ​​в экземпляр объекта» после установки ASP.NET и веб-инструментов 2015 (RC1 Update 1)
  • Почему intellisense и предложение кода перестают работать, когда Visual Studio открыта?
  • Публикация сайта без roslyn
  • Interesting Posts

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

    Двухфазная обработка: не выводить пустые tags из обработки фаз-1 XSLT 2.0

    Babel 6 изменяет способ экспорта по умолчанию

    Сколько места на жестком диске мне нужно для установки Windows 7 на моем Mac через Boot Camp?

    Разница между примечаниями Big-O и Little-O

    Изменение размера раздела Windows 7, работающего на VirtualBox с динамически распределенным хранилищем

    Как настроить Wildfly для обслуживания статического контента (например, изображений)?

    Rsync через SSH с cron в osx-environment

    Как бороться с различными пропорциями в libGDX?

    UIImageWriteToSavedPhotosAlbum сохраняет неправильный размер и качество

    Как я могу справиться со многими уровнями отступов?

    Как / когда создавать файлы обложек Gradle?

    Может ли кто-нибудь опубликовать хорошо сформированный образец crossdomain.xml?

    Как сопоставить числовые данные в категории / корзины в кадре данных Pandas

    Существует ли доступная лицензия / лицензионный платеж DRM для защиты и распространения контента?

    Давайте будем гением компьютера.