ป้ายกำกับ: SCD

.NET publish.NET publish

นี่คือบทความคู่มือการใช้งาน dotnet publish ที่สรุปภาพรวม วิธีใช้งาน และ Best Practices สำหรับนำไปใช้จริงครับ คุณสามารถปรับแต่งเนื้อหาเพิ่มเติมให้เข้ากับโปรเจกต์ของคุณได้เลยครับ


เจาะลึก dotnet publish คำสั่งสำคัญสำหรับการ Deploy แอปพลิเคชัน .NET

เมื่อเราพัฒนาแอปพลิเคชันด้วย .NET จนพร้อมใช้งานแล้ว ขั้นตอนสุดท้ายที่สำคัญที่สุดคือการเตรียมโค้ดและไฟล์ต่าง ๆ เพื่อนำไปรันบน Server หรือเครื่องปลายทาง คำสั่งที่จะมารับหน้าที่นี้คือ dotnet publish

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


dotnet publish คืออะไร ?

คำสั่ง dotnet publish จะทำการ Compile ซอร์สโค้ด, อ่านไฟล์คอนฟิก , รวบรวม Third-party Libraries ที่จำเป็น และนำทั้งหมดมาจัดแพ็กเกจไว้ในโฟลเดอร์เดียวกัน เพื่อให้พร้อมสำหรับนำไปวางและสั่งรันบน สภาพแวดล้อมจริง ได้ทันที

สิ่งที่แตกต่างจาก dotnet build คือ Build จะเน้นสำหรับการทดสอบรันในเครื่องพัฒนา แต่อาจไม่ได้รวบรวม Dependencies หรือทำ Optimization เท่ากับการ Publish


2 โหมดหลักในการ Publish

การ Publish ใน .NET สามารถเลือกสถาปัตยกรรมของไฟล์ Output ได้ 2 รูปแบบหลัก ๆ ตามความเหมาะสมของ Infrastructure


Framework-Dependent Deployment

เป็นค่าเริ่มต้น ของ .NET การใช้โหมดนี้ ไฟล์ที่ได้จะมีขนาดเล็กมาก เพราะมันจะไม่รวมตัวรันไทม์ เข้าไปด้วย

  • ข้อดี: ไฟล์มีขนาดเล็ก , อัปเดตแพตช์ความปลอดภัยของ .NET core ได้ง่ายที่ตัว Server
  • ข้อจำกัด: เครื่องปลายทาง จำเป็นต้องติดตั้ง .NET Runtime เวอร์ชันที่ตรงกันไว้ล่วงหน้า
  • คำสั่งตัวอย่าง
    dotnet publish -c Release

Self-Contained Deployment

โหมดนี้จะทำการมัดรวมแอปพลิเคชันของคุณเข้ากับ .NET Runtime ของระบบปฏิบัติการนั้น ๆ ไว้อยู่ในชุดเดียวกัน

  • ข้อดี: เครื่องปลายทางไม่ต้องติดตั้ง .NET อะไรเลย สามารถ copy โฟลเดอร์ไปแล้วกดรันไฟล์ Executable ได้ทันที หมดปัญหาเวอร์ชัน Runtime ไม่ตรงกัน
  • ข้อจำกัด: ขนาดไฟล์จะใหญ่ขึ้นมาก และต้องระบุเป้าหมาย ให้ชัดเจนว่าจะเอาไปรันบน OS อะไร
  • คำสั่งตัวอย่าง
    dotnet publish -c Release -r linux-x64 --self-contained true

เทคนิคการลดขนาดไฟล์และเพิ่มประสิทธิภาพ

สำหรับสายรีดประสิทธิภาพ หรือต้องการทำ Docker Image ให้มีขนาดเล็กที่สุด .NET มีฟีเจอร์เด็ด ๆ ที่สามารถเปิดใช้งานผ่าน Arguments หรือใส่ในไฟล์ .csproj ได้

Single-File Executable

มัดรวมไฟล์ทุกอย่าง ให้เหลือเป็นไฟล์เดียวโดด ๆ สะดวกมากสำหรับ Console App หรือโปรแกรมที่ต้องส่งต่อให้คนอื่น
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true --self-contained true

Trimming / Tree-Shaking

ระบบจะทำการวิเคราะห์โค้ด และตัดโค้ดส่วนของ .NET Runtime หรือ Libraries ที่เราไม่ได้เรียกใช้งานทิ้งไป ช่วยลดขนาดของ Self-Contained App ลงได้อย่างมหาศาล
dotnet publish -c Release -r linux-x64 -p:PublishTrimmed=true


รวมคำสั่ง dotnet publish ที่ใช้บ่อยในชีวิตจริง

Publish สำหรับรันบน Docker

dotnet publish -c Release -r linux-x64 --self-contained false -o ./publish

Publish เป็นไฟล์เดี่ยวสำหรับ Windows 64-bit ไม่ต้องง้อ .NET Runtime

dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true --self-contained true -o ./dist

เคลียร์โฟลเดอร์เก่าก่อนลุยชัวร์สุด

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


สรุป

dotnet publish คือสะพานเชื่อมระหว่าง “เครื่องนักพัฒนา” ไปสู่ “ระบบที่ใช้งานจริง” การเลือกปรับแต่งตัวเลือกอย่าง -r , Self-Contained หรือการทำ Trimming จะช่วยให้เราได้แอปพลิเคชันที่มีขนาดและประสิทธิภาพเหมาะสมกับระบบ CI/CD pipeline และ Cloud Infrastructure ในยุคปัจจุบันมากที่สุดครับ


อ่านเพิ่มเติม