Multi-targeting
Compile una biblioteca para varios frameworks de destino desde un único proyecto; use compilación condicional y shims alternativos para las diferencias entre APIs.
Multi-targeting es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.
Concepto y ventajas
Objetivo: Publique un solo paquete que funcione en varias plataformas.
- Un solo proyecto produce varios binarios
- Los consumidores obtienen automáticamente el ensamblado más adecuado
- Use pequeñas protecciones #if cuando las API difieran
Conceptos básicos de selección de recursos
- El paquete contiene carpetas para cada destino (por ejemplo, lib/net45, lib/netstandard2.0)
- NuGet elige el recurso compatible más cercano
- Mantenga la API pública coherente; solo debe diferir el código interno
Demostración de compilación condicional
Use pequeños bloques #if para variar la implementación. Mantenga idéntica la firma del método público.
#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 estable, adaptadores internos
Mantenga la misma API pública; oculte las diferencias tras pequeños adaptadores para que a los consumidores no les importe qué destino se utiliza.
#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));
}
}
Consejos de configuración
- Use TargetFrameworks (en plural) en el proyecto para enumerar los destinos
- Limite #if a auxiliares pequeños; mantenga compartida la mayor parte del código
- Pruebe cada destino; ejecute las pruebas unitarias para cada TFM
- Publique un solo paquete con todos los recursos de destino
Errores comunes
- No exponga API públicas diferentes según el destino
- Evite anidar demasiado #if; use adaptadores pequeños
- Preste atención a las diferencias implícitas de comportamiento (rutas, codificaciones)
- Documente cualquier limitación específica de un destino
Por qué usar varios destinos
Resumen
Resumen: Usar varios destinos permite publicar varios binarios desde un solo proyecto. Mantenga la API pública coherente, oculte las diferencias tras pequeños adaptadores #if y empaquete todos los destinos juntos.
Preguntas frecuentes
¿La lección «Multi-targeting» es gratis?
Sí — el texto completo de «Multi-targeting» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Multi-targeting»?
Compile una biblioteca para varios frameworks de destino desde un único proyecto; use compilación condicional y shims alternativos para las diferencias entre APIs. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.
¿Cuánto tiempo toma la lección «Multi-targeting»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Biblioteca frente a aplicación en .csproj y versionado semántico
- Empaquetado y publicación en NuGet
- Multi-targeting