นี่คือบทความคู่มือการใช้งาน 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 ในยุคปัจจุบันมากที่สุดครับ
อ่านเพิ่มเติม