0Pricing
C# Academy · Aula

Vários destinos

Compile uma biblioteca para várias estruturas de destino a partir de um único projeto; use compilação condicional e camadas alternativas para diferenças entre APIs.

Vários destinos é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Conceito e benefícios

Objetivo: distribuir um pacote que funcione em várias plataformas.

  • Um único projeto produz vários binários
  • Os consumidores recebem automaticamente a biblioteca compilada mais adequada
  • Use pequenas proteções #if quando as APIs forem diferentes

Noções básicas de seleção de recursos

  • O pacote contém pastas para cada destino (por exemplo, lib/net45, lib/netstandard2.0)
  • O NuGet escolhe o recurso compatível mais próximo
  • Mantenha a API pública consistente; somente o código interno deve ser diferente

Demonstração de compilação condicional

Use pequenos blocos #if para variar a implementação. Mantenha a assinatura do método público idêntica.

#define NET45   // simulate building for different targets
// #define NETSTANDARD2_0

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Target: " + TargetName());
  }

  // Public API: stays the same across targets
  public static string TargetName()
  {
#if NET45
    return "net45 build";
#elif NETSTANDARD2_0
    return "netstandard2.0 build";
#else
    return "unknown target";
#endif
  }
}

API estável, adaptadores internos

Mantenha a mesma API pública; oculte as diferenças atrás de pequenos adaptadores para que os chamadores não precisem saber qual destino é usado.

#define NET45

using System;
using System.IO;

public class Program
{
  // Public API is stable; internal implementation differs.
  public static string ReadAllTextCompat(string path)
  {
#if NET45
    // net45 has File.ReadAllText; use it directly.
    return File.ReadAllText(path);
#else
    // Example shim path (for an older TF that lacks some helper API)
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
    using (var sr = new StreamReader(fs))
    {
      return sr.ReadToEnd();
    }
#endif
  }

  public static void Main(string[] args)
  {
    // For demo, write then read
    string p = "demo.txt";
    File.WriteAllText(p, "hello");
    Console.WriteLine(ReadAllTextCompat(p));
  }
}

Dicas de configuração

  • Use TargetFrameworks (no plural) no projeto para listar os destinos
  • Limite #if a pequenos auxiliares; mantenha a maior parte do código compartilhada
  • Teste cada destino; execute testes unitários para cada TFM
  • Publique um único pacote com todos os recursos dos destinos

Armadilhas comuns

  • Não exponha APIs públicas diferentes para cada destino
  • Evite aninhamentos profundos de #if; use pequenos adaptadores
  • Fique atento a diferenças implícitas de comportamento (caminhos, codificações)
  • Documente todas as limitações específicas de cada destino

Por que usar vários destinos

Verificação rápida: qual é o principal benefício de compilar uma biblioteca para vários destinos?

Recapitulação

Recapitulação: compilar para vários destinos permite distribuir vários binários a partir de um único projeto. Mantenha a API pública consistente, oculte as diferenças atrás de pequenos adaptadores #if e empacote todos os destinos juntos.

Perguntas Frequentes

A aula “Vários destinos” é grátis?

Sim — o texto completo de “Vários destinos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “Vários destinos”?

Compile uma biblioteca para várias estruturas de destino a partir de um único projeto; use compilação condicional e camadas alternativas para diferenças entre APIs. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.

Quanto tempo leva a aula “Vários destinos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Biblioteca versus aplicativo em .csproj, versionamento semântico
  2. Empacotamento e publicação no NuGet
  3. Vários destinos
← Voltar para C# Academy