0Pricing
C# Academy · บทเรียน

การรองรับหลายเป้าหมาย

สร้างไลบรารีเดียวสำหรับเฟรมเวิร์กเป้าหมายหลายแบบจากโครงการเดียว ใช้การคอมไพล์แบบมีเงื่อนไขและชิมทางเลือกสำรองสำหรับความแตกต่างของ API

การรองรับหลายเป้าหมาย เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

แนวคิดและประโยชน์

เป้าหมาย: จัดส่งแพ็กเกจเดียวที่ทำงานได้บนหลายแพลตฟอร์ม

  • โครงการเดียวสร้างไบนารีหลายชุด
  • ผู้ใช้แพ็กเกจจะได้รับแอสเซมบลีที่เหมาะสมที่สุดโดยอัตโนมัติ
  • ใช้ตัวตรวจสอบ #if ขนาดเล็กเมื่อส่วนติดต่อโปรแกรมแตกต่างกัน

พื้นฐานการเลือกทรัพยากร

  • แพ็กเกจมีโฟลเดอร์แยกตามเป้าหมาย เช่น lib/net45 และ lib/netstandard2.0
  • NuGet จะเลือกทรัพยากรที่เข้ากันได้ใกล้เคียงที่สุด
  • รักษาส่วนติดต่อโปรแกรมสาธารณะให้สอดคล้องกัน โดยให้แตกต่างเฉพาะโค้ดภายในเท่านั้น

การสาธิตการคอมไพล์แบบมีเงื่อนไข

ใช้บล็อก #if ขนาดเล็กเพื่อเปลี่ยนแปลงการนำไปใช้ รักษาลายเซ็นของเมธอดสาธารณะให้เหมือนเดิม

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

ส่วนติดต่อเสถียร ตัวเชื่อมภายใน

รักษาส่วนติดต่อโปรแกรมสาธารณะเดียวกันไว้ ซ่อนความแตกต่างด้วยตัวเชื่อมขนาดเล็ก เพื่อให้ผู้เรียกใช้ไม่ต้องสนใจว่าใช้เป้าหมายใด

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

เคล็ดลับการตั้งค่า

  • ใช้ TargetFrameworks ในโครงการเพื่อแสดงรายการเป้าหมาย
  • จำกัด #if ไว้สำหรับตัวช่วยขนาดเล็ก และใช้โค้ดส่วนใหญ่ร่วมกัน
  • ทดสอบแต่ละเป้าหมาย โดยเรียกใช้การทดสอบหน่วยแยกตาม TFM
  • เผยแพร่แพ็กเกจเดียวที่มีทรัพยากรของทุกเป้าหมาย

ข้อผิดพลาดที่พบบ่อย

  • อย่าเปิดเผยส่วนติดต่อโปรแกรมสาธารณะที่แตกต่างกันในแต่ละเป้าหมาย
  • หลีกเลี่ยงการซ้อน #if หลายชั้น ใช้ตัวเชื่อมขนาดเล็กแทน
  • ระวังความแตกต่างของพฤติกรรมโดยนัย เช่น เส้นทางและการเข้ารหัส
  • จัดทำเอกสารเกี่ยวกับข้อจำกัดเฉพาะของแต่ละเป้าหมาย

เหตุผลที่ต้องรองรับหลายเป้าหมาย

ตรวจสอบสั้น ๆ: ประโยชน์หลักของการทำให้ไลบรารีรองรับหลายเป้าหมายคืออะไร

สรุปทบทวน

สรุปทบทวน: การรองรับหลายเป้าหมายช่วยจัดส่งไบนารีหลายชุดจากโครงการเดียว รักษาส่วนติดต่อโปรแกรมสาธารณะให้สอดคล้องกัน ซ่อนความแตกต่างไว้หลังตัวเชื่อม #if ขนาดเล็ก และจัดแพ็กเกจทุกเป้าหมายไว้ด้วยกัน

คำถามที่พบบ่อย

บทเรียน “การรองรับหลายเป้าหมาย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การรองรับหลายเป้าหมาย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การรองรับหลายเป้าหมาย”

สร้างไลบรารีเดียวสำหรับเฟรมเวิร์กเป้าหมายหลายแบบจากโครงการเดียว ใช้การคอมไพล์แบบมีเงื่อนไขและชิมทางเลือกสำรองสำหรับความแตกต่างของ API คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “การรองรับหลายเป้าหมาย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ไลบรารีกับแอป .csproj และการกำหนดเวอร์ชันเชิงความหมาย
  2. การแพ็กและเผยแพร่ไปยัง NuGet
  3. การรองรับหลายเป้าหมาย
← กลับไปที่ C# Academy