Я смотрел на новые функции для Visual Studio 2015, и Shared Project часто появлялся, но я не понимаю, чем он отличается от использования библиотеки классов или переносимой библиотеки классов. Кто-нибудь может объяснить?
Изменить: Общий проект является новой функцией в Visual Studio 2015 и отличается от Portable Class Library. Я понимаю, что такое Portable Class Library. Я пытаюсь понять, как общий проект отличается от библиотеки классов. Смотрите ссылку ниже.
c#
.net
visual-studio-2015
Indy411
источник
источник
Ответы:
Разница между общим проектом и библиотекой классов заключается в том, что последний компилируется, а единицей повторного использования является сборка.
В то время как в первом случае единица повторного использования является исходным кодом, и общий код включается в каждую сборку, которая ссылается на общий проект.
Это может быть полезно, когда вы хотите создать отдельные сборки, предназначенные для конкретных платформ, но при этом имеющие код, который должен быть предоставлен в общий доступ.
Смотрите также здесь :
В предыдущих версиях Visual Studio 1 вы могли обмениваться исходным кодом между проектами, добавив -> Существующий элемент и затем выбрав ссылку. Но это было немного неуклюже, и каждый отдельный исходный файл нужно было выбирать индивидуально. Перейдя на поддержку нескольких разнородных платформ (iOS, Android и т. Д.), Они решили упростить обмен исходными текстами между проектами, добавив концепцию общих проектов.
1 Этот вопрос и мой ответ (до сих пор) предполагают, что общие проекты были новой функцией в Visual Studio 2015. Фактически, они дебютировали в Visual Studio 2013 Update 2
источник
Я нашел больше информации из этого блога .
источник
Короткие различия
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/
источник
Как уже писали другие, вкратце:
совместное
повторное использование проекта на уровне кода (файла), что позволяет учитывать структуру папок и ресурсы
ПКЛ
повторное использование на уровне сборки
Что мне в большинстве случаев не хватало в ответах здесь, так это информация о сниженной функциональности, доступной в PCL: в качестве примера у вас ограничены файловые операции (мне не хватало функциональности File.IO в кроссплатформенном проекте Xamarin).
Более подробно
общий проект :
+ Может использовать #if при нацеливании на несколько платформ (например, Xamarin iOS, Android, WinPhone)
+ Все функциональные возможности фреймворка, доступные для каждого целевого проекта (хотя и должны быть скомпилированы условно)
o Интеграция во время компиляции
- немного больший размер итоговых сборок
- Требуется Visual Studio 2013 Update 2 или выше
pcl :
+ создает общую сборку
+ для использования со старыми версиями Visual Studio (обновление до 2013 года)
o динамически связанная
функциональность - lmited (подмножество всех проектов, на которые она ссылается)
Если у вас есть выбор, я бы порекомендовал пойти на общий проект, он, как правило, более гибкий и мощный. Если вы заранее знаете свои требования и PCL может выполнить их, вы также можете пойти по этому пути. PCL также обеспечивает более четкое разделение, не позволяя вам писать специфичный для платформы код (который, в первую очередь, не может быть хорошим выбором для размещения в общей сборке).
Основное внимание уделяется тому, когда вы нацеливаетесь на несколько платформ, в противном случае вы обычно используете обычный проект библиотеки / DLL.
источник
Из книги VS 2015 лаконично
Общие проекты позволяют совместно использовать код, активы и ресурсы для нескольких типов проектов. Более конкретно, следующие типы проектов могут ссылаться и использовать общие проекты:
Примечание. - Как общие проекты, так и переносимые библиотеки классов (PCL) допускают совместное использование кода, ресурсов XAML и ресурсов, но, конечно, есть некоторые различия, которые можно обобщить следующим образом.
источник
Библиотека классов - это общий скомпилированный код.
Общий проект - это общий исходный код.
источник