0Pricing
C# Academy · Lección

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

Comprobación rápida: ¿Cuál es la principal ventaja de usar varios destinos para una biblioteca?

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

  1. Biblioteca frente a aplicación en .csproj y versionado semántico
  2. Empaquetado y publicación en NuGet
  3. Multi-targeting
← Volver a C# Academy