Membagikan pustaka buatan sendiri sebagai package NuGet melibatkan tiga langkah, yaitu menulis pustaka bertipe class library, mengemasnya menjadi arsip .nupkg dengan dotnet pack, dan mengirim arsip itu ke repositori package dengan dotnet nuget push. Topik ini membangun pustaka kecil bernama KalkulatorPaket dari nol, melengkapi metadata package-nya, lalu mengemas dan mengirimkannya ke sumber lokal di folder. Langkah pengiriman ke nuget.org dijelaskan pada bagian akhir karena membutuhkan akun dan kunci API yang tidak tersedia di lingkungan latihan.
Membuat pustaka class library#
Class library adalah proyek yang tidak punya titik masuk Main, sehingga pustaka ini tidak dijalankan sendiri melainkan dimuat oleh aplikasi lain yang membutuhkannya. Proyek semacam itu dibuat dengan dotnet new classlib, dan pustaka contoh pada topik ini berisi satu kelas statis dengan satu fungsi penghitung kata. Kedua berkas yang menyusun proyeknya ditunjukkan di bawah, yaitu satu berkas kode dan satu berkas proyek, sehingga pustaka sekecil apa pun tetap berdiri sebagai proyek lengkap yang dapat dikompilasi.
namespace KalkulatorPaket;
public static class PenghitungKata
{
public static int Hitung(string teks) =>
teks.Split(' ', System.StringSplitOptions.RemoveEmptyEntries).Length;
}Kata kunci public pada kelas dan metodenya menentukan bagian pustaka yang terlihat oleh pemakainya. Anggota yang tidak diberi public tetap terkompilasi ke dalam pustaka, tetapi tidak dapat dipanggil dari proyek lain, sehingga penempatan kata kunci ini adalah cara menata batas antarmuka pustaka. Nama namespace menyesuaikan nama package agar pencarian tipe oleh pemakai tetap alami, dan pemakai yang mengimpor KalkulatorPaket langsung menemukan kelas yang ditawarkan tanpa pembelajaran tambahan.
Metadata package pada berkas proyek#
Sifat package yang terbit dinyatakan sebagai properti pada berkas .csproj, dan properti-properti itu diteruskan menjadi manifest di dalam arsip .nupkg. Empat properti menentukan identitas package, yaitu PackageId sebagai nama uniknya, Version sebagai nomor rilisnya, Authors sebagai pembuatnya, dan Description sebagai penjelasan singkat yang tampil pada halaman package.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<PackageId>KalkulatorPaket</PackageId>
<Version>1.0.0</Version>
<Authors>Ali</Authors>
<Description>Kumpulan fungsi penghitung kata untuk latihan publikasi package NuGet.</Description>
</PropertyGroup>
</Project>Apabila PackageId tidak dituliskan, nama berkas proyek dipakai sebagai gantinya, sedangkan Version bawaan bernilai 1.0.0. Identitas PackageId bersifat unik pada repositori tempat package diterbitkan, sehingga package dengan nama yang sudah diambil di nuget.org ditolak saat pengiriman. Deskripsi yang jelas membantu calon pemakai memahami isi package tanpa membuka kode sumbernya, dan nilai-nilai ini dapat diubah setiap rilis tanpa menyentuh kode pustaka sama sekali. Properti lain seperti RepositoryUrl dan License melengkapi halaman package pada repositori publik, tetapi keempat properti di ataslah yang menentukan identitas dasarnya.
Mengemas dengan dotnet pack#
Perintah dotnet pack mengompilasi pustaka lalu membungkus hasil kompilasi bersama manifestnya menjadi arsip .nupkg. Konfigurasi build yang dipakai adalah Release secara default, sehingga arsip yang dihasilkan sudah dioptimalkan. Contoh berikut menyalin proyek pustaka ke folder kerja sementara terlebih dahulu agar artefak build tidak menempel pada folder topik.
# aktifkan .NET yang terpasang di sandbox
export DOTNET_ROOT=/home/kal/.dotnet PATH=/home/kal/.dotnet:$PATH DOTNET_CLI_TELEMETRY_OPTOUT=1 DOTNET_NOLOGO=1
# siapkan folder kerja sementara dan salin proyek pustaka dari folder topik
rm -rf /tmp/cs-eko/publikasi
mkdir -p /tmp/cs-eko/publikasi
cp KalkulatorPaket.csproj PenghitungKalkulator.cs /tmp/cs-eko/publikasi/
# kemas pustaka menjadi package NuGet, hanya baris deterministik yang ditampilkan
dotnet pack /tmp/cs-eko/publikasi/KalkulatorPaket.csproj -o /tmp/cs-eko/publikasi/nupkg 2>&1 | grep "Successfully created package" Successfully created package '/tmp/cs-eko/publikasi/nupkg/KalkulatorPaket.1.0.0.nupkg'.Opsi -o menentukan folder keluaran arsipnya, dan nama berkasnya menggabungkan PackageId dengan Version, sehingga setiap rilis menghasilkan arsip dengan nama yang berbeda. Proses pack juga menuliskan folder obj dan bin di sebelah berkas proyeknya, dan itulah alasan contoh ini menyalin proyek ke folder sementara terlebih dahulu, yaitu agar folder topik tetap bersih dari artefak build.
# perlihatkan isi folder keluaran pack
ls /tmp/cs-eko/publikasi/nupkgKalkulatorPaket.1.0.0.nupkgArsip .nupkg berbentuk zip yang berisi pustaka terkompilasi beserta manifest .nuspec, sehingga isinya dapat diperiksa dengan alat arsip apa pun sebelum diterbitkan. Pemeriksaan ini berguna untuk memastikan DLL yang ikut sudah benar dan manifestnya memuat deskripsi yang diharapkan.
Mengirim package ke repositori#
Perintah dotnet nuget push mengirim arsip ke sebuah sumber (source), yaitu lokasi penyimpanan package yang dapat berupa folder lokal, feed privat organisasi, atau nuget.org. Sumber lokal berupa folder adalah sarana latihan yang paling ringan karena tidak membutuhkan jaringan maupun kredensial, dan perilakunya sama dengan sumber daring dari sisi perintahnya.
# buat folder sumber lokal, lalu kirim package ke sumber tersebut
mkdir -p /tmp/cs-eko/publikasi/repo
dotnet nuget push /tmp/cs-eko/publikasi/nupkg/KalkulatorPaket.1.0.0.nupkg --source /tmp/cs-eko/publikasi/repo 2>&1 | grep "pushed"Your package was pushed.Pengiriman ke nuget.org mengikuti langkah yang sama dengan sumber dan kredensial yang berbeda. Akun dibuat terlebih dahulu di situs nuget.org, kunci API (API key) dibuat dari halaman akun itu dengan hak publikasi yang diizinkan, lalu kunci tersebut dilewatkan pada perintah pengiriman. Kunci API menggantikan kata sandi agar perintahnya dapat dijalankan dari sistem otomatis tanpa menyimpan kredensial akun.
# tidak-dijalankan
# pengiriman ke nuget.org membutuhkan kunci API pribadi dan layanan daring yang eksternal
dotnet nuget push /tmp/cs-eko/publikasi/nupkg/KalkulatorPaket.1.0.0.nupkg --source https://api.nuget.org/v3/index.json --api-key KUNCI_APISetelah pengiriman diterima, package memasuki antrean validasi dan halamannya tampil di nuget.org dalam beberapa menit, kemudian package itu dapat dipasang oleh siapa pun dengan dotnet add package.
Kesalahan umum#
- Mengirim ulang versi yang sudah terbit. Repositori menolak arsip dengan
PackageIddanVersionyang sama, sehingga setiap rilis menuntut kenaikanVersionpada berkas proyek terlebih dahulu. - Memilih
PackageIdtanpa pemeriksaan. Nama yang sudah dipakai package lain di nuget.org menyebabkan penolakan saat pengiriman, sehingga ketersediaan nama diperiksa di situs repositori sebelum pengemasan. - Melupakan
publicpada kelas pustaka. Proses pack tetap berhasil, tetapi pemakai tidak dapat melihat kelasnya karena hanya anggotapublicyang terekspos, dan perbaikannya adalah menambahkan kata kunci itu lalu mengemas ulang dengan versi baru.
Ringkasan#
- Pustaka yang dibagikan berbentuk class library tanpa titik masuk, dan bagian yang terekspos ditentukan oleh kata kunci
public. - Metadata package dinyatakan sebagai properti
.csprojberupaPackageId,Version,Authors, danDescription, lalu diteruskan ke manifest.nuspecdi dalam arsip. dotnet packmengompilasi pustaka dalam konfigurasi Release dan menghasilkan arsip.nupkgyang namanya menggabungkan identitas dengan versi.dotnet nuget push --sourcemengirim arsip ke folder lokal maupun nuget.org, dan pengiriman ulang versi yang sama ditolak repositori.
Referensi#
- Create and publish a package using the dotnet CLI — Microsoft Learn — Panduan resmi membuat dan menerbitkan package dari proyek pustaka.
- dotnet pack — Microsoft Learn — Dokumentasi perintah pengemasan beserta properti package yang didukungnya.
- dotnet nuget push — Microsoft Learn — Dokumentasi perintah pengiriman package ke sumber lokal maupun jarak jauh.
- Publishing packages — Microsoft Learn — Aturan penerbitan di nuget.org, termasuk kunci API dan penarikan package.