Visão geral do código de compartilhamento

Este documento compara os diferentes métodos de compartilhamento de código entre projetos multiplataforma: .NET Standard, Projetos Compartilhados e Bibliotecas de Classes Portáteis, incluindo os benefícios e desvantagens de cada um.

Há três métodos para compartilhar código entre aplicativos multiplataforma:

  • Bibliotecas .NET Standard – os projetos do .NET Standard podem implementar o código a ser compartilhado em várias plataformas e podem acessar um grande número de APIs do .NET (dependendo da versão). O .NET Standard 1.0 – 1.6 implementa conjuntos progressivamente maiores de APIs, enquanto o .NET Standard 2.0 fornece a melhor cobertura do BCL do .NET (incluindo as APIs do .NET disponíveis em aplicativos Xamarin).
  • Projetos Compartilhados – use o tipo projeto de ativo compartilhado para organizar seu código-fonte e usar #if diretivas do compilador conforme necessário para gerenciar requisitos específicos da plataforma.
  • Bibliotecas de Classes Portáteis (preteridas) – PCLs (Bibliotecas de Classes Portáteis) podem ter como destino várias plataformas com uma superfície de API comum e usar Interfaces para fornecer funcionalidade específica da plataforma. As PCLs foram preteridas nas versões mais recentes do Visual Studio – use o .NET Standard.

O objetivo de uma estratégia de compartilhamento de código é dar suporte à arquitetura mostrada neste diagrama, em que uma única base de código pode ser utilizada por várias plataformas.

Arquitetura de aplicativo de código compartilhado

Este artigo compara os métodos disponíveis para ajudá-lo a escolher o tipo de projeto certo para seus aplicativos.

Bibliotecas do .NET Standard

As bibliotecas .NET Standard fornecem um conjunto bem definido das bibliotecas de classe base que podem ser referenciadas em diferentes tipos de projeto, incluindo projetos multiplataforma, como Xamarin.Android e Xamarin.iOS. O .NET Standard 2.0 é recomendado para compatibilidade máxima com o código de .NET Framework existente.

Diagrama do .NET

Benefícios

  • Permite que você compartilhe código em vários projetos.
  • As operações de refatoração sempre atualizam todas as referências afetadas.
  • Uma área de superfície maior da BCL (Biblioteca de Classes Base) do .NET está disponível do que os perfis pcl. Em particular, o .NET Standard 2.0 tem quase a mesma superfície de API que o .NET Framework e é recomendado para novos aplicativos e portabilidade de PCLs existentes.

Desvantagens

  • Não é possível usar diretivas do compilador como #if __IOS__.

Comentários

O .NET Standard é semelhante à PCL, mas com um modelo mais simples para suporte à plataforma e um número maior de classes da BCL.

Projetos compartilhados

Projetos Compartilhados contêm arquivos de código e ativos incluídos em qualquer projeto que faça referência a eles. Os projetos de compartilhamento não produzem a saída compilada por conta própria.

Esta captura de tela mostra um arquivo de solução que contém três projetos de aplicativo (para Android, iOS e Windows), com um projeto Compartilhado que contém arquivos de código-fonte C# comuns:

Solução de projeto compartilhado

A arquitetura conceitual é mostrada no diagrama a seguir, em que cada projeto inclui todos os arquivos de origem compartilhados:

Diagrama de projeto compartilhado Diagrama

Exemplo

Um aplicativo multiplataforma compatível com iOS, Android e Windows exigiria um projeto de aplicativo para cada plataforma. O código comum reside no Projeto Compartilhado.

Uma solução de exemplo conteria as seguintes pastas e projetos (os nomes de projeto foram escolhidos para expressividade, seus projetos não precisam seguir estas diretrizes de nomenclatura):

  • Compartilhado – Projeto Compartilhado que contém o código comum a todos os projetos.
  • AppAndroid – projeto de aplicativo Xamarin.Android.
  • AppiOS – projeto de aplicativo Xamarin.iOS.
  • AppWindows – projeto de aplicativo do Windows.

Dessa forma, os três projetos de aplicativo estão compartilhando o mesmo código-fonte (os arquivos C# em Compartilhado). Todas as edições no código compartilhado serão compartilhadas entre os três projetos.

Benefícios

  • Permite que você compartilhe código em vários projetos.
  • O código compartilhado pode ser ramificado com base na plataforma usando diretivas do compilador (por exemplo, usando #if __ANDROID__ , conforme discutido no documento Criando aplicativos multiplataforma ).
  • Os projetos de aplicativo podem incluir referências específicas da plataforma que o código compartilhado pode utilizar (como usar Community.CsharpSqlite.WP7 no exemplo tasky para Windows Phone).

Desvantagens

  • Refatorações que afetam o código dentro de diretivas do compilador 'inativo' não atualizarão o código dentro dessas diretivas.
  • Ao contrário da maioria dos outros tipos de projeto, um Projeto Compartilhado não tem nenhum assembly de "saída". Durante a compilação, os arquivos são tratados como parte do projeto de referência e compilados nesse assembly. Se você quiser compartilhar seu código como um assembly, as Bibliotecas de Classes Portáteis ou .NET Standard serão uma solução melhor.

Comentários

Uma boa solução para desenvolvedores de aplicativos que escrevem código que se destina apenas ao compartilhamento em seu aplicativo (e não à distribuição para outros desenvolvedores).

Bibliotecas de Classes Portáteis

Dica

As bibliotecas do .NET Standard 2.0 são recomendadas em bibliotecas de classes portáteis.

As bibliotecas de classes portáteis são discutidas em detalhes aqui.

Diagrama da biblioteca de classes portátil

Benefícios

  • Permite que você compartilhe código em vários projetos.
  • As operações de refatoração sempre atualizam todas as referências afetadas.

Desvantagens

  • Preteridas nas versões mais recentes do Visual Studio, as bibliotecas do .NET Standard são recomendadas. Consulte esta explicação das diferenças entre PCL e .NET Standard.
  • Não é possível usar diretivas do compilador.
  • Somente um subconjunto do .NET Framework está disponível para uso, determinado pelo perfil selecionado (consulte a Introdução à PCL para obter mais informações).

Comentários

O modelo PCL é considerado preterido nas versões mais recentes do Visual Studio.

Resumo

A estratégia de compartilhamento de código escolhida será orientada pelas plataformas que você está direcionando. Escolha um método que funcione melhor para seu projeto.

O .NET Standard é a melhor opção para criar bibliotecas de código compartilháveis (especialmente publicando no NuGet). Os Projetos Compartilhados funcionam bem para desenvolvedores de aplicativos que planejam usar muitas funcionalidades específicas da plataforma em seus aplicativos multiplataforma.

Embora os projetos pcl continuem a ter suporte no Visual Studio, o .NET Standard é recomendado para novos projetos.