Windows Phone

Windows Phone Kütüphanelerinin NuGet ile Dağıtılması

NuGet Nedir? Java dili ile geliştirme yapılan ortamlarda Maven ile aşılan bu problem, Microsoft geliştirme ortamlarında da NuGet ile önemli ölçüde çözülmüş durumda. Bir çeşit kütüphane dağıtım aracı olarak düşünebileceğimiz NuGet, ASP.Net takım&#...

Mehmet Altıparmak |

16.09.2013

 

NuGet Nedir?

Java dili ile geliştirme yapılan ortamlarda Maven ile aşılan bu problem, Microsoft geliştirme ortamlarında da NuGet ile önemli ölçüde çözülmüş durumda. Bir çeşit kütüphane dağıtım aracı olarak düşünebileceğimiz NuGet, ASP.Net takımı çalışanları tarafından geliştirilmiştir. NuGet sayesinde geliştirdiğimiz projelere 3. parti kütüphaneleri sorunsuz bir şekilde bağımlılıkları ile birlikte entegre edebildiğimiz gibi, istersek kendi geliştirdiğimiz kütüphanelerin de diğer geliştiricilere ulaşmasını sağlayabiliyoruz.

Visual Studio 2012’de yerleşik olarak gelen NuGet, Visual Studio 2010’a ise eklenti yöneticisi ile kolayca kurulabiliyor. Microsoft platformunda geliştirme yapan hemen hemen tüm geliştiricilerin kullandığı ve vazgeçemeyeceği bir araç haline gelen NuGet’i kendi kütüphanelerimizi de dağıtabileceğimiz en uygun kanal olarak düşünebiliriz.

 

Basit Bir Windows Phone 8.0 Kütüphanesi

İlk adım olarak dağıtmak istediğimiz basit bir Windows Phone (WP) 8.0 sınıf kütüphanesi (class library) geliştirelim. Geliştireceğimiz kütüphane de, başka 3. parti kütüphanelere (neredeyse her projede yer alan Json.NET ve Microsoft Http Client Libraries) bağımlı olsun. Az da olsa gerçekçi olması amacıyla IMDB üzerindeki bir filmin poster resmini gösterme yeteneği olan özel bir kontrol geliştirelim. Kontrol geliştiriciden ihtiyacı olan film IMDB ID’sini ImdbId özelliği sayesinde alsın...

 

NuGet Paketinin Oluşturulması

Geliştirdiğimiz kütüphaneyi NuGet’e yükleyebilmemiz için NuGet paketi oluşturmamız gerekiyor. Bu paket içerisinde kütüphane dosyaları ve bu dosyalar hakkında üst-veriler (metadata) bulunacak. Özel bir .xml formatı bulunan paket dosyasını hazırlarken NuGet Package Explorer aracını kullanacağız, böylece .xml formatını öğrenmemize gerek kalmadan hızlıca paketimizi oluşturabileceğiz.

NuGet Package Explorer aracını yukarıdaki bağlantıya tıklayarak bilgisayarınıza indirebilirsiniz. ClickOnce ile dağıtılan aracın kurulumu çok basit.

Açılış ekranında aşağıdaki gibi yapılabilecek işlemlerin listesiyle karşılayan uygulamada, yeni paket oluşturmak için “Create a new package (CTRL+N)” seçeneğini seçip ilerliyoruz:



Sonraki adımda karşımıza paketimizin içeriğini oluşturacak alanları görebileceğimiz pencere geliyor. Pencere temel olarak iki panelden oluşuyor; Paket Üst Verisi (Package Metadata) ve Paket İçeriği (Package Contents) alanları:
 

 

Paket Üst Verisi (Package Metadata)

Bu panelin sol üst kısmında bulunan düzenle düğmesine tıklayarak alanları değiştirebiliyoruz. Bazı alanlar ve açıklamaları aşağıdaki gibi:

Alan Adı

Açıklama

Zorunlu mu?

Id

Paketinizin tekilliğini sağlayacak olan alan. NuGet içerisinde aynı Id’ye sahip iki paket bulunamıyor.

Evet

Version

Paketinizin versiyon numarası. Geliştirdiğiniz kütüphane dosyalarının versiyon numarası ile aynı olmak zorunda değil.

Evet

Title

Kütüphanenin NuGet’te kayıtlı olacağı isim. Başlık.

Hayır

Authors

Geliştiriciler

Evet

Icon Url

32x32 boyutunda, arka planı transparan olan bir .png dosyasının linki. Link girildikten sonra .png dosyası indiriliyor ve paket içerisine kaydediliyor.

Hayır

Project Url

Proje sayfasının linki.

Hayır

License Url

Kütüphane lisans sözleşmesinin linki.

Hayır

Summary

Kütüphaneniz hakkında özet bilgi.

Hayır

Description

Kütüphanenizin hakkında özetten daha detaylı bir açıklama.

Evet

Release Notes

Sürüm notları.

Hayır

Copyright

Telif metni.

Hayır

Tags

Kütüphaneniz ile ilgili olduğunu düşündüğünüz kelime ve kelime grupları.

Hayır

 

Değerleri verdikten sonra yine Paket Üst Verisi panelinin sol üst kısmındaki yeşil renkli onay düğmeye tıklayarak NuGet Paket Yöneticisi'nde paketimizin nasıl görüneceğini görebiliriz:
 

 

 

Bağımlılıkların Belirtilmesi

Kütüphanemizi geliştirirken iki adet 3. parti kütüphane kullandığımızdan bahsetmiştik. NuGet paketimizi oluştururken bu kütüphaneleri de belirtmeliyiz ki, bir geliştirici kütüphanemizi NuGet aracılığı ile projesine eklerken NuGet otomatik olarak o kütüphaneleri de projeye ekleyebilsin.

Bağımlı olduğumuz 3. Parti kütüphaneleri düzenlemek için Package Metadata panelinin alt kısmında bulunan Edit Dependencies düğmesine tıklıyoruz ve aşağıdaki gibi bir form açılıyor:
 


Form açıldıktan sonra sol üst kısımda bulunan yeşil renkli + düğmesine tıklayarak bir dependency group (bağımlılıklar grubu) ekliyoruz. Oluşturduğumuz bağımlılık grubu için target framework wp80 olarak belirtiyoruz (Diğer frameworkler için kullanılan isimleri yazının altındaki tabloda bulabilirsiniz). Sonrasında ise oluşturduğumuz bağımlılık grubuna kullandığımız 3. Parti kütüphaneleri eklemek için kırmızı ok ile gösterilmiş düğmeye tıklıyoruz. Düğmeye tıkladığımız zaman, eklemek istediğimiz 3. partileri aratıp bulabileceğimiz aşağıdaki gibi bir form açılıyor. Burada kullandığımız tüm 3. Parti NuGet kütüphanelerini bulup tek tek bağımlılık grubuna ekliyoruz.

Not: Varsayılan (Default) olarak paketlerin son sürümleri listeleniyor. Daha eski bir sürümü kullanmak istiyorsak aşağıdaki görüntüde kırmızı çerçeve içerisine alınmış “Only show latest versions of each package id.” seçeneğini kaldırmalısınız.

Benzer şekilde son sürüme (final release)’e ulaşmamış bir paket kullanmak istiyorsanız “Show pre-relase packages.” seçeneğinin işaretli olması gerekiyor.
 

 

Paket İçeriği (Package Content)

Paket üst verimizi tamamladık. Son aşama olarak paket içeriğimizi ekleyeceğiz ve paketimiz yayınlanmaya hazır olacak.

Paketimize içerik eklemek için Paket İçeriği (Package Content) paneline gelip sağ tıklıyoruz. Aşağıda görüldüğü gibi açılan menüde içerik tiplerine özel dizinler oluşturmak için seçenekler bulunuyor:
 



Oluşturduğumuz kütüphanenin çıktı (output, *.dll) dosyalarını eklemek için bu menüden Add Lib Folder seçeneğini seçiyoruz. Sonrasında Windows Phone 8.0 kütüphanelerine özel olan wp8 dizini eklemek için lib dizinine sağ tıklıyor ve Add Windows Phone Folder  > v8.0 seçeneği seçiyoruz. Bu dizin hiyerarşisi sayesinde kütüphanelerin hangi platformları desteklediği de belirtilmiş oluyor. Son olarak wp8 dizinine kütüphanemizin çıktı dosyalarını ekliyoruz:
 

Hazırladığımız kütüphaneyi lib/wp8 dizinine ekleyerek sadece Windows Phone 8.0 platformunu desteklediğimizi de belirtmiş olduk. Böylece sadece ilgili proje şablonlarında kütüphanemiz listelenecek (Örneğin bir Windows Forms projesinde kütüphanemiz referans olarak eklenmek istenirse NuGet kütüphanemizi listelemeyecek). Son olarak paketimiz aşağıdaki gibi görünmektedir:
 

Not: Farklı bir framework ya da birden fazla framework desteklemek için her hedef framework için ilgili dizini yaratıp o dizin altına ilgili çıktı dosyalarını eklememiz gerekiyor. NuGet Package Explorer sayesinde oluşturmamız gereken dizin isimlerini bilmeden açılan menü ile bu dizinleri yaratabilirsiniz.

 

Son olarak kütüphanemizi yayınlamak üzere paketimizi File -> Save seçeneğini seçerek kaydediyoruz.

 

Paketin Yayınlanması

NuGet üzerinde paketimizi yayınlayabilmek için öncelikle bir NuGet hesabına sahip olmamız gerekiyor. NuGet hesabını buradan yaratabilirsiniz. Hesap oluşturduktan sonra giriş yapıyoruz ve sayfa üzerindeki ana menüdeki Upload Package (Paket Yükle) linkine tıklıyoruz. Aşağıdaki gibi bir sayfa açılıyor:
 


Choose a package yazan kısımdaki Browse düğmesine tıklayarak önceki adımlarda oluşturduğumuz .nupkg uzantılı paketimizi seçiyoruz ve Upload düğmesine tıklıyoruz. Paket bilgilerimizin gösterildiği bir doğrulama sayfasına yönlendiriyoruz. Bu sayfadaki verilerin doğruluğunu kontrol ettikten sonra sayfanın alt kısmındaki Submit(Gönder) düğmesine tıklıyoruz ve kütüphanemiz yayında!
 

 

 

NuGet Kullanarak Paketimizi Örnek Bir Projeye Ekleyelim

Örnek bir Windows Phone 8.0 projesi oluşturalım ve projemize sağ tıklayıp manage NuGet packages seçeneğini seçelim. Aşağıdaki form açıldığında gördüğünüz gibi Imdb anahtar kelimesi ile arama yaptığımızda paketimiz listeleniyor:
 

Install düğmesine tıklamamızla birlikte gerekli bağımlılıklar ve kütüphanemiz projeye referans olarak ekleniyor ve sorunsuz bir şekilde kütüphanemizi kullanabiliyoruz.

 

 

 

 

Hedef Framework İsimlendirmeleri Tablosu

Araç

Target (Hedef)

Notlar

.NET 3.5

net35

Sadece '35' de kullanabilirsiniz.

.NET 4.0

net40

Sadece '40' da kullanabilirsiniz.

.NET 4.0 Client Profile

net40-client

 

.NET 4.0 Full Profile

net40-full

Tüm .NET profilini gerektirir.

.NET 4.0 Compact Framework

net40-cf

‘net40-compactframework’ de kullanabilirsiniz

.NET Micro Framework

netmf

 

Silverlight 3.0

sl3

 

Silverlight 4.0

sl4

 

Silverlight 5.0

sl5

 

Windows Phone 7.0

sl3-wp

 

 

wp7

Sadece NuGet 2.1 ve sonrası

Windows Phone 7.1 (Mango)

sl4-windowsphone71

 

 

wp71

Sadece NuGet 2.1 ve sonrası

Windows Phone 8

windowsphone8

Sadece NuGet 2.1 ve sonrası

Windows Store apps (Javascript, C#, VB.NET)

netcore45

 

 

windows8

Sadece NuGet 2.1 ve sonrası

Portable class library for Windows Store apps and .NET 4.5

portable-windows8+net45

Sadece NuGet 2.1 ve sonrası

Portable class library for Windows Store apps, Silverlight 4.0 and Windows Phone 7.1

portable-sl4+wp71+windows8

Sadece NuGet 2.1 ve sonrası

Mehmet Altıparmak |

16.09.2013

Yorumlar

Mustafa Çiçek
23.09.2013 - 05:02

Böyle yararlı makaleleri görmek güzel...

Teşekkürler.