Nerede project.json ?

Peki bağımlılıklarımı nasıl yöneteceğim ?

Gün geçmiyor ki Microsoft yeni bir şeyler yapmasın. .NET Core, ASP.NET Core ve Visual Studio 2017 yi takip edenler bilir sürekli bir güncelleme ve değişiklik içerisinde ilerliyor projeler. Biz geliştiriceler için yeni fırsatlar ile birlikte işimizi kolaylaştırmak için yapılsada bir çok takipçinin github, twitter, blog vb. mecralarda yaptığı yayınlardan değişiklere yetişip adapte olunmasının güç olduğu aşikar. Bu nedenle geçtiğimiz 6 ay içerisinde Visual Studio 2017 RC ile birlikte csproj dosyalarında yapılan değişiklikten bahsetmek istedim.

Biraz işin geçmişini inceleyelim

Biraz geri çekilip, .NET Core ve ASP.NET Core ‘un tarihini anlamaya çalışayım. ASP.NET Core (daha önce ASP.NET 5 olarak adlandırılmıştı) için beta öncesinde ASP.NET ve .NET ekipleri birbirlerinden bağımsız olarak çalışıyordu. .NET ekibi, .NET çekirdeğinin API yüzeyinde yoğun bir şekilde çalışıyorken, ASP.NET ekibi .NET ekibinin hazırladığı API’nin üstünde ASP.NET Core uygulama platformunda çalışıyordu. ASP.NET Core ile çalışmak için kullanılan araç, erken bir önizlemeydi ve o sırada DNVM ve DNU komutlarını kullanıyorduk. DNVM ve DNU o zamandan beri dotnet CLI’yi oluşturmak için birleştirildi ve değiştirildi.

ASP.NET projelerinin geliştirilmesini destekleyen ekip, yeni bir proje dosyası biçimini geliştirmeye karar verdi. Birincisi project.json, csproj tabanlı projelerle çalışan topluluğun yaşadığı birçok sorunu ele alıyordu ve daha basit bir yapıydı. O zamanlar, özellikle .NET Core projeleri için hiçbir şey mevcut yada kesin değildi. Henüz yeni geliştiriliyordu. ASP.NET Core platformu için yeni bir başlangıç oluşturulduğundan, değişiklik yapmak için iyi bir zaman olduğunu düşündüler. Betalarda ve sürüm adayı sırasında, web uygulamaları oluştururken insanlar yeni project.json ve xproj tabanlı çözümleri kullanıp test etmeye başladı. Yanıt gerçekten çok olumluydu. Project.json, bağımlılıkların otomatik tamamlanması, okunmasının kolaylığı ve daha basit bir genel yapı sağladı.

Şahsen project.json ile çalışmaya bende oldukça hızlı adapte oldum. tüm bağımlılıkların tek yerden hızlı ve pratik yönetilmesi işlerimizi kolaylaştırdı. Öyleki bugüne kadar bir projenin bağımlılıklarını yeni versiyonları ile değiştirmek hiç bu kadar basit, hızlı ve sorunsuz olmamıştı.

Ancak sürüm adayı periodunda kararlarda değişimler oldu. Aslına bakarsanız öncesinde daha geniş bir çerçevede düşünülmesi gereken bir durumdu. Ne mi? Yeni bir ASP.NET Core projesine başladıysanız sorun yoktu. Peki eski bir projenizi taşımaya karar verdiyseniz. Tabi birde diğer .NET proje tipleri sözkonusu. Geliştiriciler project.json hakkındaki endişelerini ve MSBuild içerisinde desteklenmediğini paylaşmaya başlamışlardı.Tüm bunlar monolit projeler için ne anlam taşıyordu ? Bu projeler .NET Core a nasıl taşınacaktı ? Adil olmak gerekirse bu endişelerinde haklılardı. Özetle yeni bir ASP.NET Core projesine başlayıp project.json ın imkanları ile geliştirme yapmak harikaydı. Fakat eski bir projeyi taşımak ekstra çaba ve gayret gerektiriyordu. Bunları göz önünde bulunduran ekip daha geniş bir .NET proje biçimi etrafında kararlar almaya başladı. Kararları gecikmişte olsa oldukça yerinde bir karar olduğunu itiraf etmeliyiz. Bir duyuru
ile project.json ‘ın geriye doğru MSBuild uyumluluğu için csproj formatının hazır olduğunu bildirdiler.ASP.NET Core 1.0 ın RTM öncesinde tamamlanması için çok geçti. Fakat bu gelişmenin Visual Studio 2017 ile kullanılabileceği hakkında da söylemler olmuştu.

Ve bu bizi bugüne getiriyor, Visual Studio 2017 RC ilan edildi. Bununla birlikte yeni (veya eski demeliyiz) csproj proje formatını kullanan projeler üzerinde çalışabiliriz. Neyin değiştiğini görmek için dosyaya bir bakalım.

Visual Studio 2015 in project.json’ı ile Visual Studio 2017 RC’nin csproj’unu karşılaştıralım

Microsoft, project.json dosyasının geliştiricilere, geliştirilmiş csproj formatında yaptığı iyileştirmelerin birçoğunu taşımak istedikleri değişim üzerinde çalışırken güvence verdi.

project.json csproj karşılaştırması
project.json csproj karşılaştırması

Yukarıdaki resimde varsayılan template ile Visual Studio 2015 (soldaki) ve visual Studio 2017 (sağdaki) de birer web application başlattım. Resimdende anlayacağınız üzere en belirgin fark project.json ın, json formatına sahipken yeni csproj formatının xml olması.Dosyalarda satır uzunlukları arasındaki farkın fazla olmadığına dikkat edin. project.json 65 satır, csproj ise 77 satır. Geleneksel csproj hatlarında bir azalma söz konusu.

Benim düşüncem her ne kadar Microsoft csproj da iyileştirmeler yaparak gürültüyü azaltsada xml tag ‘leri arasında aradığımı bulmaya çalışmak json formatına göre zor geliyor.

Bir de hoşuma giden avantajdan bahsetmek istiyorum. Csproj dosyasının project.json üzerine güzel bir avantajı artık (Core olmayan) NET projelerine de referanslar ekleyebilmemizdir. Daha önce entegrasyon mevcut değildi.

Pek hoşuma gitmeyen bir durumda, ben yazarken paketlerin ve sürümlerin uygun olanı otomatik tamamlanması durumu artık yok. Project.json ile bir bağımlılık adını yazmaya başladığımda Visual Studio bana olasılıkları Intellisense özelliği ile sunuyordu. Bu, csproj dosyasında yok gibi görünüyor. Şahsen ben sadece bazı durumlar için temel intellisense gördüm, ama hepsi değil, sadece xml etiketlerinde var.

Kısaca project.json ve yeni csproj formatına değinmeye çalıştım. Daha sonra project.json migrating konusunu da ele alacağım.

Reklamlar