Como otros ya escribieron, en resumen:
reutilización compartida del proyecto en el nivel de código (archivo), lo que permite la estructura de carpetas y los recursos también
reutilización de pcl en el nivel de ensamblaje
Lo que más me faltaba de las respuestas aquí para mí es la información sobre la funcionalidad reducida disponible en una PCL: como ejemplo, tiene operaciones de archivo limitadas (me faltaba mucha funcionalidad de File.IO en un proyecto multiplataforma de Xamarin).
En más detalle,
proyecto compartido :
+ Puede usar #if cuando se dirige a múltiples plataformas (por ejemplo, Xamarin iOS, Android, WinPhone)
+ Toda la funcionalidad del marco disponible para cada proyecto de destino (aunque debe compilarse condicionalmente)
o Se integra en el momento de la compilación
- Tamaño ligeramente mayor de ensamblajes resultantes
: necesita Visual Studio 2013 Update 2 o superior
pcl :
+ genera un ensamblado compartido
+ utilizable con versiones anteriores de Visual Studio (anterior a la actualización 2 de 2013)
o vinculado dinámicamente
- funcionalidad limitada (subconjunto de todos los proyectos a los que se hace referencia)
Si tiene la opción, recomendaría ir a un proyecto compartido, generalmente es más flexible y más potente. Si conoce sus requisitos de antemano y un PCL puede cumplirlos, también podría tomar esa ruta. PCL también impone una separación más clara al no permitirle escribir código específico de la plataforma (lo que podría no ser una buena opción para colocarlo en un ensamblado compartido en primer lugar).
El enfoque principal de ambos es cuando apunta a múltiples plataformas, de lo contrario, normalmente usaría solo un proyecto de biblioteca / dll ordinario.