0Pricing
C# Academy · Lezione

Multi-targeting

Create una libreria per più framework di destinazione da un singolo progetto; usate la compilazione condizionale e shim di fallback per le differenze tra API.

Multi-targeting è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Concetto e vantaggi

Obiettivo: distribuisca un unico pacchetto compatibile con più piattaforme.

  • Un singolo progetto produce più binari
  • I consumer ricevono automaticamente l'assembly più adatto
  • Utilizzi piccole direttive #if quando le API differiscono

Nozioni di base sulla selezione degli asset

  • Il pacchetto contiene cartelle per ogni target (ad esempio lib/net45, lib/netstandard2.0)
  • NuGet seleziona l'asset compatibile più vicino
  • Mantenga coerente l'API pubblica; solo il codice interno dovrebbe differire

Dimostrazione della compilazione condizionale

Utilizzi piccoli blocchi #if per variare l'implementazione. Mantenga identica la firma del metodo pubblico.

#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 stabile e shim interni

Mantenga la stessa API pubblica; nasconda le differenze dietro piccoli shim, così ai chiamanti non importa quale target venga utilizzato.

#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));
  }
}

Suggerimenti per la configurazione

  • Utilizzi TargetFrameworks (al plurale) nel progetto per elencare i target
  • Limiti #if a piccoli helper; mantenga condivisa la maggior parte del codice
  • Testi ogni target; esegua gli unit test per ogni TFM
  • Pubblici un unico pacchetto con tutti gli asset dei target

Problemi comuni

  • Non esponga API pubbliche diverse per ogni target
  • Eviti annidamenti profondi di #if; utilizzi piccoli shim
  • Faccia attenzione alle differenze di comportamento implicite (percorsi, codifiche)
  • Documenti le eventuali limitazioni specifiche del target

Perché usare più target

Controllo rapido: qual è il vantaggio principale dell'utilizzo di più target per una libreria?

Riepilogo

Riepilogo: l'utilizzo di più target consente di distribuire diversi binari da un unico progetto. Mantenga coerente l'API pubblica, nasconda le differenze dietro piccoli shim #if e inserisca tutti i target nello stesso pacchetto.

Domande Frequenti

La lezione «Multi-targeting» è gratuita?

Sì — il testo completo di «Multi-targeting» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «Multi-targeting»?

Create una libreria per più framework di destinazione da un singolo progetto; usate la compilazione condizionale e shim di fallback per le differenze tra API. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.

Quanto tempo richiede la lezione «Multi-targeting»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Libreria e app .csproj, versionamento semantico
  2. Creazione e pubblicazione su NuGet
  3. Multi-targeting
← Torna a C# Academy