หลายคนอาจจะสงสัยในเมื่อ Source Code เป็นของเราเองทำไมต้องทำเป็น Nuget Package ด้วยหละ มันมีเหตุผลของมัน ดังนี้ครับ
- จัดการได้ง่าย และสะดวกแก่การติดตาม เพราะ แยกเป็นเวอร์ชันอย่างบชัดเจนครับ
- ติดตั้งได้ง่าย แทนที่จะเอาไฟล์ .dll มาอ้างอิงใน Project หลัก เราสามารถอ้างอิงตัว Nuget Package แทนครับ และเมื่อมีเวอร์ชันใหม่ เราสามารถใช้ Nuget Package Manager จัดการ Update เวอร์ชันได้ทั้ง Solution เลยครับ
- แยกส่วน ทำให้สามารถทดสอบในระดับย่อย (Unit Test) ได้ง่ายครับ
ถ้าจะทำ NuGet ใช้ในองค์กรเอง อันนี้เตรียมพร้อมอย่างไรบ้าง
- สร้าง NuGet Server - ก่อนครับ ซึ่งมีหลายหลายค่ายครับ
- ถ้าง่ายหน่อยใช้ MS Team Foundation Server
- หรือใช้ NuGet.Server เพียงแค่เพิ่ม NuGet Package นี้เข้าไป จากนี้ Build และ Deploy ได้ NuGet Server เลยครับ
- หรือใช้ Nexus Repository Server ฟังไม่ผิดครับ ของพวก Maven แหละครับ แต่เราไปเกาะอยู่ด้วยครับ 55 โดยการติดตั้งเอา Docker Image มา Run จากนั้น Config ค่านิดหน่อยครับ
หมายเหตุ สำหรับ NuGet.Server และ Nexus Repository Server ถ้าว่างเดี๋ยวผมเขียน Blog แยกครับผม
- Publish เข้า Nuget Server อันนี้ง่ายกว่าอีกครับ เพียงแค่มี nuget.exe พอครับ หรือถ้าใช้ลงพวก Runtime สำหรับ .NET Core มีคำสั่ง dotnet เข้ามาด้วยครับ ซึ่งมีความสามารถเหมือนกัน nuget.exe ทุกอย่างครับ
เตรียม Publish Code เข้า NuGet Server ครับ
- สำหรับในส่วนนี้ต้องมี NuGet Server ในองค์กรก่อนนะครับ หรือจะลองทดสอบกับ NuGet.org ได้เหมือนกันครับ สามารถอ่าน Reference ได้เพิ่มเติมครับผม
- มาลอง Publish Code กันครับ สมัยนนี้ทุกคนคงไม่ได้ Build มือกันแล้วนะครับ ของไปในแนวทาง Script และกันครับ โดยสามารถเอาคำสั่งมาทดสอบใน Jenkins Pipeline ได้เลยครับ หรือ CI Server เจ้าอื่นๆครับ
มาลอง Publish Code
- สร้าง NuGet Package ด้วยคำสั่ง dotnet pack
- กำหนดชื่อไฟล์ Solution (กรณีที่ Solution นั้นรวม Project ที่ใช้สำหรับ NuGet อยู่แล้วทั้งหมด) หรือจะกำหนดราย Project โดยใช้ .csproj ก็ได้ครับ
- รูปแบบการ Publish NuGet -c / -o : กำหนด Build แบบ Release แบบ Nuget
- และ มีการกำหนดคุณสมบัติ (property) หรือ -p อย่างตัวอย่างคำสั่งเป็นการกำหนดเวอร์ชันของ NuGet Package ครับ
- ตัวอย่างคำสั่ง dotnet pack ครับ
dotnet pack <<.csproj / .sln >> -c Release -o nuget -p:PackageVersion= << Your Version>>
- ถ้าหากต้องการเตรียม NuGet Package ให้คนอื่นสามารถ Debug ได้ต้อง เพิ่มอีก 2 Option ครับ ได้แก่
- --include-source : บอกว่าให้ใส่ Source Code ลงไปด้วยครับ
- --include-symbols : บอกว่าให้ใส่ Program Database (.pdb) เพื่ออ้างอิงลงไปสำหรับการ Debug ครับ
- ตัวอย่างคำสั่ง dotnet pack ที่เตรียม NuGet Package แบบ Debug ได้ด้วยครับ
dotnet pack ds.common.sln -c Release --include-source --include-symbols -o nuget -p:PackageVersion=1.0.9
- เมื่อได้ตัว NuGet Package แล้ว ขั้นตอนถัดไป Publish NuGet Package เข้าไปยัง NuGet Server ครับ โดยสิ่งที่ต้องมี
- API KEY : เอาไว่ในยืนยันตัวตน โดย Generate ได้จาก NuGet Server
- NuGet Server IP : เอาไว้บอกปลายทางครับ ว่าจะส่ง NuGet Package เข้าไปยัง Server ไหน IP อะไรครับ
- มาดูคำสั่งกันบางครับ โดยสามารถใช้คำสั่ง dotnet push โดยมีรูปแบบ ดังนี้
dotnet nuget push ".\\nuget\\*.nupkg" --api-key <<Your API KEY>> --source <<Your NuGet Server>>
- ตัวอย่างคำสั่ง dotnet pack ที่ได้ลองใช้งานจริงครับ
dotnet nuget push ".\\nuget\\*.nupkg" --api-key 0a538810-31f1-3ader-bf7d-3b0sQ92we052 --source http://192.168.0.15:8081/repository/nuget-hosted/
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.