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...
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ı |
16.09.2013
Yorumlar
Çok güzel bi yazı olmuş, ellerinize sağlık.
Böyle yararlı makaleleri görmek güzel...
Teşekkürler.