Yeni NuGet paketi oluşturma

.NET Geliştiricilerinin sıklıkla kullandığı nuget paket yöneticisinden herkes en az bir paket indirip kullanmıştır diye düşünüyorum kimimiz belkide paketler olmadan geliştirme yapamayacak kadar alışkanlık dahi edinmiş olabiliriz 🙂 neyse asıl konumuz biz nuget paketi oluşturmak ve yayınlamak istersek bunu nasıl yapabileceğimizi ve neler yapmamız gerektiğini göreceğiz bu makalede.

Yeni NuGet paketi oluşturma

Nuget paket oluşturma adımlarına geçmeden önce ortamımızı hazır hale getirelim ilk yapmamız gereken nuget işlemleri için nuget.exe‘ye sahip olmamız gerekiyor bunun için nuget.org adresinden nuget.exe dosyasını indirebilirsiniz.

Nuget.exe dosyasını indirdikten sonra bunu paketini oluşturacağımız .net projesinin olduğu yere atıyoruz yani .csproj uzantılı dosya ile aynı konuma atıyoruz(Böylesinin daha pratik olduğunu düşünüyorum farklı bir yolda yer alan nuget.exe’nizide kullanabilirsiniz).

.nuspec Dosyası Oluşturma

.nuspec uzantılı tanım dosyası sayesinde nuget paketi oluşturabileceğiz.

Yeni bir .nuspec tanım dosyası oluşturmak için alttaki spec komutu projenin olduğu yerde çalıştırın.

nuget spec

.nuspec uzantılı dosyayı notepad yada herhangi bir kod editöründen(vscode, brackets, notepad++ v.b.) açabilirsiniz.

Proje İçin .nuspec Dosyası Oluşturma

Eğer nuget’a yayınlayacağınız bir dll ise yada diğer bir deyişle bir projeyi nuget paketi olarak çıktı alacaksınız. Alttaki parafraftan okumaya devam edip .nuspec dosya içeriğine bakabilirsiniz ama eğer bir javascript dosyası, css dosyası yada diğer türdeki dosyalar için bir nuget paketi oluşturmak isterseniz bir sonraki “Dosya(lar) için .nuspec dosyası oluşturma” başlığına bakabilirsiniz.

.nuspec uzantılı dosya içerisinde yer alan $id$, $version$, $title$, $author$ değerleri Projenizin Properties > Application tabında yer alan Assembly Imformation adındaki button’a tıkladığınızda karşınıza çıkan ekrandaki değerler ile değiştirilmektedir ayrıca bu ekrandaki değerlere AssemplyImformation.cs dosyası içerindende ulaşabilirsiniz. Şimdide .nuspec uzantılı varsayılan olarak oluşturulan dosya içeriğine bakalım.

Bundan sonraki anlatımlarımıza Foo.csproj adlı projemizin olduğunu varsayıp bu dosya üzerinden örneklerle gideceğiz.

Dosya(lar) İçin .nuspec Dosyası Oluşturma

Üstteki nuspec dosyasından farklı olarak files adında bir tag açılacak ve bu tag’in 2 farklı attribute’ü kullanılarak gerekli dosya tanımlamalarınız ile dosyalardan oluşan nuget paketini oluşturabilirsiniz.

Üstteki kodda işaretli olan files etiketi içerisinde tanımlı olan file etiketinde yer alan 2 attribute şu anlama geliyor src attribute’ü ile nuget paketine dahil edilecek dosyaları temsil ediyor target attribute’ü ise nuget’den paket yüklendiğinde projenin hangi kısmına yükleneceği belirleniyor. Genellikle Typescript DefinitelyTypes‘lar scripts\typings\FolderName\file.d.ts şeklinde kaydedildiği için bu şekilde bir target tanımı görüyorsunuz ama sizin dahil ettiğiniz dosya css ise target değeri değişecektir veya javascript kütüphanesi ise yine target değeri değişecektir buna dikkat edilmesi gerekiyor hangi dosya türleri .net projelerinde hangi klasör altında yer alıyorsa bu şekilde standart bir yol izleyerek paketinizi yükleyecek olan kullanıcının standart dosya hiyerarşisini karıştırmamış olursunuz.


Dependency Yönetimi

Eğer nuget paketi oluşturmak için kullanacağınız yapınızın farklı yapılara bağımlılığı varsa o zaman .nuspec uzantılı dosya içerisinde bu bağımlılıkları belirtmelisinizki kullanıcı sizin nuget paketinizi yüklemeye çalıştığında eğer bağımlılığınız olan paket kullanıcıda yoksa öncelikle onun yüklenmesi ardından sizin paketinizin yüklenmesi sağlanır.

Bağımlılıkları yönetmek için yapmanız gereken .nuspec dsoayası içerisinde metada etiketleri arasına dependencies etiketini eklemelisiniz örnek dependency tanımı için alttaki koda gözatabilirsiniz.

Üstteki dependency etiketlerinde yer alan id attribute’üne verilecek değer sizin nuget paketi kurarken kullanmış olduğunuz id ile aynıdır. Örnek nuget install Sendloop dediğinizde burada paketin id’si Sendloop‘dur. Version özelliğinde kullanabileceğiniz birçok pattern bulunmaktadır bu pattern’lere alttaki tablodan açıklamaları ile ulaşabilirsiniz.

TanımUygulanma KuralıAçıklama
1.01.0 ≤ xMinimum versiyon, dahil
(1.0,)1.0 < xMinimum versiyon, dahil değil
[1.0]x == 1.0Tam sürüm eşleştirmesi
(,1.0]x ≤ 1.0Maksimum versiyon, dahil
(,1.0)x < 1.0Maksimum versiyon, dahil değil
1.0,2.0]1.0 ≤ x ≤ 2.0Belli aralıktaki versiyonlar, dahil
1.0,2.0)1.0 < x < 2.0Belli aralıktaki versiyonlar, dahil değil
[1.0,2.0)1.0 ≤ x < 2.0Minimum ile maksimum arasındaki versiyonlar bir üstteki tanımdan tek farkı minimum sürüm dahil edilmiş ama maksimum sürüm dahil değil.
(1.0)GeçersizGeçersiz bir tanımdır.

Nuget Paketi Oluşturma

Proje için nuget Paketi oluşturma

Normalde nuget paketini direk olarak .csproj uzantılı dosya üzerinden oluşturmaya çalıştığımızda Debug configuration’u üzerinden paket oluşturulacaktır ama biz Release configuration’u üzerinden oluşturmak istersek o zaman alttaki şekilde bir kod kullanabiliriz.

NuGet.exe pack Foo.csproj -Prop Configuration=Release

Üstteki komut başarılı bir şekilde çalıştıktan sonra Foo.1.0.0.0.nupkg adında bir dosya üretilecektir.

Dosya(lar) için nuget paketi oluşturma

.nuspec nuget paket tanım dosyasının olduğu yolda alttaki komutunuzu çalıştırırsanız yine proje paketi oluşturma kısmına olduğu gibi .nupkg uzantılı upload’a hazır bir nuget paket dosyası almış olacaksınız.

NuGet.exe pack

Paketi Yayınlama

Paketi yayınlamak isterseniz https://www.nuget.org/packages/manage/upload adresini yada nuget.exe dosyasını CLI(Command Line Interface)‘de kullanabilirsiniz.

Eğer https://www.nuget.org/packages/manage/upload adresinden paketi yayınlamak isterseniz. Ücretsiz nuget.org hesabı oluşturun yada hesabınız varsa nuget hesabınız ile giriş yapın ve menüde Upload Package linkine tıklayıp upload sayfasından .nupkg uzantılı paketinizi upload edip yayınlayabilirsiniz.

Eğer paketi yayınlama işini CLI ile halletmek isterseniz Api Key‘e sahip olmalısınız nuget.org Api Key‘ini almak için nuget.org adresinden giriş yaptıktan sonra sağ üstteki kullanıcı adına tıklayıp API Keys altına yer alan New Api Key butonuna tıklayın ve ardından sırasıyla gerekli alanları girin alanlar ile ilgili bilgilere alttaki tablodan ulaşabilirsiniz.

Alan AdıAçıklama
Key NameOluşturacağız key için bir isim verin.
Expires InOluşturacağız key’in geçerlilik süresini girin.
Select ScopesOluşturacağınız key’in yapacağız işlem alanlarını belirleyebiliyorsunuz. Push radio butonunu seçerseniz yayınlama işlemi yapabilirsiniz Push radio butonunu seçtiğinize 2 seçenek çıkıyor Push new packages and package versions  bu seçeneği seçerseniz yeni paket ve pakete ait sonraki versiyonları yayınlayablirsiniz. Eğer Push only new package versions seçeneğini seçerseniz o zaman sadece varolan pakete ait yeni versiyonları yayınlama işlemlerini yapabilirsiniz.
Select Packages

Glob Pattern: * karakteri ile tüm paketler üzerinden bu api key ile işlem yapabilirsiniz. Alpha.* şeklinde bir pattern kullanırsanız buda Alpha. ile başlayan paketleriniz üzerinde ilgili api key üzerinden işlem yapılabileceğini belirtiyorsunuz.

Avaible Packages: Bu kısımdan manuel olarak hangi paketleriniz için ilgili api key ile işlem yapılabileceğini seçebilirsiniz.

Key Oluşturma Demosu

Tablodaki alanları kendinize göre seçtikten ve girişleri yaptıktan sonra oluşturduğunuz key’i alıp alttaki gibi push kodunu ve diğer api-key gerektiren kodu kullabilirsiniz.

nuget push Foo.1.0.0.0.nupkg 00000000-0000-0000-0000-0000000000 -Source https://www.nuget.org/api/v2/package

Yeni Versiyon Çıkarıp Yayınlama

Makalede buraya kadarki kısımda yeni oluşturulmuş bir paketin nasıl yayınlanabileceğini gösterdik fakat yayınladığımız bir paket için yeni bir sürüm yayınlamak istediğimizde ne yapacağız?

Bunun için yapılması gereken iki önemli şey var ilk yayınladığınız paketin sürümünün 1.0.0 olduğunu varsayalım ve paket üzerinde değişiklik yaptığınızı varsayıp paketi tekrar yayınlamak istediniz bu durumda yayınlama işleminde aynı sürümle yayınlanamayacağı ile ilgili bir hata alacaksınız bunun için yapmanız gereken ilk yayınlamadan sonraki her yayınlama işlemi öncesinde versiyon arttırma işlemini gerçekleştirmelisiniz.

Versiyon arttırma işlemini isterseniz .nuspec dosyası üzerinden $id$ kısmına manuel olarak girip gerçekleştirebilirsiniz istersenizde makalenin önceki kısımlarında Assembly Informartion diye bir kısımdan bahsetmiştim bu kısımdan yönetebilirsiniz.

Versiyonlama Yapısı

Versiyonlama için kabul görmüş standartlardan olan major-minor-patch yapısını kullanabilirsiniz ben bu yapıyı kullanıyorum ama kimisi bu yapıyı tarihsel olarak kurgulayıp kullanabiliyor örnek YYYY-MM-DD tarih formatını major-minor-patch yapısına uyarlayarak kullanılabiliyor ayrıca bu yapıya bazı kaynaklarda major-minor-build’de denebiliyor. Ben major minor-path diye versiyonlama yapısından bahsettim ama Assembly Information penceresinden baktığınızda 4 kutu olduğunu göreceksiniz buda major-minor-revision-build versiyonlama yapısınıda desteklediğini gösteriyor fakat siz son kutuyu kullanmadığınız zaman otomatik olarak versiyonlamayı 3 basamak olarak gerçekleştiriyor.

Şimdi versiyonlama yapısını neye göre yapmalıyız ne yaptığımız zaman hangi alanı arttırmalıyız gibi sorulara major-minor-revision-build yapısı üzerinden örnek verelim ayrıca bu örneği isterseniz major-minor-patch içinde kullanabilirsiniz. major-minor-revision-build versiyonlama yapısındaki tüm adımları neye göre arttıracağımızı alttaki açıklamalarda görebilirsiniz.

  • Major: Uygulamanızda büyük ve önemli değişiklikler olduğunda.
  • Minor: Uygulamanızda orta halli önemli değişiklikler olduğunda.
  • Revision: Her hangi bir ufak değişiklik yada bug çözümünde.
  • Build: Normalde bu alan uygulamanızın her build edilme aşamasında otomatik artan bir değer olması gerekiyor(Bu kısımdan dolayı ben major-minor-patch yapısını kullanmayı daha uygun buluyorum).

Eğer bu süreçleri manuel değilde bir arayüz yardımıyla yapmak istiyorsanız NuGetPackageExplorer adlı masaüstü yazılımını güvenle kullanabilirsiniz.

NuGet ile ilgili daha farklı bir bilgiye ihtiyacınız varsa kaynaklar kısmındaki NuGet Documentation adresini ziyaret edip dökümandan faydalanabilirsiniz.

Kaynaklar

Yeni NuGet paketi oluşturma
5 (100%) 5 oy

Bir Cevap Yazın