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
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
- Biblioteca versus aplicativo em .csproj, versionamento semântico
- Empacotamento e publicação no NuGet
- Vários destinos