Como outros já escreveram, em suma:
reutilização compartilhada do projeto no nível do código (arquivo), permitindo a estrutura e os recursos da pasta também
reutilização de pcl no nível de montagem
O que mais faltava nas respostas aqui para mim é a informação sobre funcionalidade reduzida disponível em uma PCL: como exemplo, você limitou as operações de arquivo (estava faltando muita funcionalidade do File.IO em um projeto de plataforma cruzada Xamarin).
Projeto compartilhado com mais detalhes :
+ Pode usar #if ao direcionar várias plataformas (por exemplo, Xamarin iOS, Android, WinPhone)
+ Toda a funcionalidade da estrutura disponível para cada projeto de destino (embora precise ser compilado condicionalmente)
o Integra em tempo de compilação
- tamanho ligeiramente maior de montagens resultantes
- Precisa do Visual Studio 2013 Update 2 ou superior
pcl :
+ gera um assembly compartilhado
+ utilizável com versões mais antigas do Visual Studio (atualização 2 anterior a 2013)
o
- funcionalidade vinculada dinamicamente vinculada - (subconjunto de todos os projetos pelos quais está sendo referenciado)
Se você tiver a opção, eu recomendaria um projeto compartilhado, geralmente é mais flexível e mais poderoso. Se você conhece seus requisitos com antecedência e um PCL pode atendê-los, você pode seguir esse caminho também. O PCL também impõe uma separação mais clara ao não permitir que você escreva código específico da plataforma (o que pode não ser uma boa opção para ser colocado em um assembly compartilhado em primeiro lugar).
O foco principal de ambos é quando você direciona várias plataformas, caso contrário, normalmente você usaria apenas um projeto comum de biblioteca / dll.