สร้าง .NET Core 2.0 package

เวลาต้องการแยกของที่สามารถใช้ร่วมกันออกจาก code ของ .NET Core ทำได้โดยการแยกมันออกมาเป็น Package เสร็จแล้วค่อย add มันกลับเข้าไปเป็น dependency ของ project แทน วิธีนี้จะทำให้ code เราสะอาดขึ้น และดูแลได้ง่ายขึ้น

วิธีการสร้าง Package ใน .NET Core ก็ไม่ได้ยุ่งยากอะไร แค่ใช้คำสั่ง dotnet new classlib นั่นเอง

เช่น ถ้าอยากสร้าง Package เอาไว้สำหรับทำ String manipulation ชื่อว่า StringLib ก็พิมพ์

dotnet new classlib -o StringLib

พอเปิดดูใน project จะเห็นไฟล์ Class1.cs ก็เปลี่ยนชื่อเป็นชื่อเดียวคลาสที่เราต้องการ เช่น StringEngine.cs เสร็จแล้วก็เปลี่ยนชื่อ class ให้ตรงกันด้วย จะได้ออกมาหน้าตาแบบนี้

using System;

namespace StringLib
{
    public class StringEngine
    {
        
    }
}

ทีนี้ก็เพิ่ม method ที่อยากได้ตามสบาย เช่น อยากทำ method ที่เอาไว้แปลง input ที่ส่งเข้ามาให้เป็น snake case ก็จะได้ประมาณนี้

using System;

namespace StringLib
{
    public class StringEngine
    {
        public static string SnakeCase(string s) {
            string[] t = s.Split(' ');
            return string.Join("_", t);
        }
    }
}

หลังจากเขียน code เสร็จ และ test เรียบร้อยจนพอใจ ก็สั่ง pack เป็น nuget package เพื่อเอาไว้ใช้กับ project อื่น ๆ ได้เลย ด้วยคำสั่ง dotnet pack

dotnet pack -c Release

ก็จะได้ไฟล์ .nupkg โผล่มาใน bin/Release

เมื่อได้ package file แล้ว ก็แล้วแต่เราว่าจะ publish .nupkg ที่ได้ไปไว้ที่ไหน เช่น nuget server หรือจะไว้ที่ folder ใน local disk หรือ local network เสร็จแล้วตอนจะเอาไปใส่ใน project อื่น ก็ไปที่ project นั้นแล้วสั่ง dotnet add package

dotnet add package StringLib

ถ้า source เป็นที่อื่นที่ไม่ใช่ nuget server กลาง ก็ให้เพิ่ม source เข้าไปตอน add package ด้วย option -s

dotnet add package StringLib -s /path/to/nupkg/file

สมมติว่า อยากจะเพิ่ม API ใหม่ลงไปใน StringAPI ที่เขียนไว้ใน post “สร้าง .NET Core 2.0 Web API” ก็เข้าไปที่ project แล้วก็ add package เสร็จแล้ว สามารถ using มาใช้ได้เลย

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using StringAPI.Models;
using StringLib;

namespace StringAPI.Controllers
{
    [Route("api/[controller]")]
    public class SnakeController : Controller
    {
        [HttpPost]
        public IActionResult Post([FromBody]SnakeArgs value)
        {
            var camel_result = StringEngine.SnakeCase(value.Arg);   
            var response = new {
                result = camel_result
            };
            return Ok(response);
        }
    }
}

เสร็จแล้วก็ลองทดสอบดู

ทุกอย่างก็ดูโอเคดีนะ

Tips!

ถ้าต้องการ clear nuget cache ที่เกิดจาก dotnet add package ให้ใช้คำสั่งตามนี้

dotnet nuget locals all --clear

Leave a Reply