Bildiyimiz kimi Noyabr ayında Microsoft net5.0 versiyanı və C# 9-u tqdim etdi. Özlərinin də qeyd etdiyi kimi, net5.0 versiyası .Net platformasının vahid hala gətirilməsi yolunda ilk buraxılışdır. Əslində bu versiyada bu tam olaraq tamamlanmalı idi, lakin pandemiya səbəbləri ilə əlaqədar bəzi gecikmələr olduğundan digər qalan məsələlər net6.0-da ediləcək.
.NET 5.0 is the first release in our .NET unification journey. We built .NET 5.0 to enable a much larger group of developers to migrate their .NET Framework code and apps to .NET 5.0. We’ve also done much of the early work in 5.0 so that Xamarin developers can use the unified .NET platform when we release .NET 6.0.
Daha detallı buradan oxuya bilərsiniz. Bu versiyanın həmçinin əsas məqsədlərindən biri daha çox .Net Framework-də olan proyektlərin .net5.0-a daşına bilməsi idi.
Beləliklə biz də TayqaTech development komandası olaraq, müxtəlif versiyalarda olan codebase-mizi net5.0-a miqrasiya etmək qərarı aldıq. Buna səbəb ən son yeniliklərdən faydalana bilmə, proyektlər arasında bir-birini asanlıqla reference edə bilmə, performans məsələləri, bəzi daxili proseslərin asan avtomatlaşdırıla bilməsi və s. məsələr dayanırdı. Söhbət çoxlu sayda library, Web Api, Windows Service tipli proyektlərdən gedir. Və təxmini 3 həftəyə biz bu prosesi tamamlaya bildik 😊. 1 həftə analiz + 1 həftə aktual keçid + 1 həftə monitoring. Bu keçid prosesi zamanı bir çox maraqlı təcrübələrimiz oldu və bunları sizlərlə paylaşmaq istəyirəm. Yazım bir neçə hissədən ibarət olacaq və mümkün qədər bütün detalları əhatə etməyə çalışacam.
Bəs ilk olaraq haradan başlamaq lazımdır ?
SDK style and non SDK style (köhnə format) projects
Əvvəlcə əgər proyektimiz .NET Framework-dədirsə o zaman onun SDK style olub olmamağına baxmaq lazımdır. non SDK style proyektlər packages.config və ProjectName.csproj vasitəsi ilə dependency-ləri idarə edir. Məsələn gəlin v4.6.2 -də yeni bir MigrationProject adında Console App yaradaq. Yaradılan App-in csproj faylına baxsaq belə bir şey görəcəyik.
Gəlin daha sonra məsələn Newtonsoft.Json paketini Nuget vasitəsi ilə yükləyək. Baş versən dəyişikliklərə baxsaq 2 şey görəcəyik.
1. yeni packages.config faylı əlavə olunub və aşağıdakı kontenti özündə saxlayır
2. csproj faylında isə aşağıdakı hissə əlavə olunub
Bu tipli formata non SDK style format və ya köhnə format deyilir. .Net Core və dha sonra net5.0 -da isə biz yeni SDK style format istifadə etməliyik. Ona görə də ilkin mərhələ bizim non SDK style proyekti SDK style proyektə çevirməkdir. Bunu təbii ki, SDK style proyektin formatına baxaraq manual da etmək mümkündür, lakin bunu qismət avtomatlaşdırmaq olur. Bunun üçün biz aşağıdakı open-source tool-dan istifadə edəcəyik. Bu dotnet global tool-dur və asanlıqla keçiddəki təlimatlara uyğun olaraq quraşdıra bilərik. Daha sonra edəcəyimi iş proyektimizin csproj faylının olduğu folderə gəlib aşağıdakı komandanı icra etməkdir.
Bu tool-un etdiyi iş sadədir. Proyektimizi və asılılıqları analiz edir və csproj faylını yeni SDK style formata çevirir. Aşağıdakı şəkildən də göründüyü kimi proyektimiz SDK style formata çevrilib və həmçinin TargetFramework olaraq netcoreapp3.1 seçilib. Çevirmədən sonra csproj faylımız belə bir struktura malik olur.
Gördüyümüz kimi artıq csproj faylımız daha oxunaqlı quruluşa malikdir və artıq bizim packages.config faylına ehtiyacımız yoxdur. Bununla da non SDK style -> SDK style format çevirmə prosesimiz tamamlanır.
.net5.0 - a miqrasiya
Daha sonra net5.0-a keçmək üçün TargetFramework-u net5.0 olaraq dəyişməliyik. net5.0 və ümumiyyətlə bu tipli göstəricilər Target framework moniker-lər adlanır. csproj faylımızın son strukturu bu şəkildə olacaqdır.
Bununla da miqrasiya prosesimiz birinci mərhələsi tamamlanır və ikinci mərhələyə yəni net5.0-da hər şeyin əvvəlki qaydada işləməsinə əmin olmaq prosesi başlayır. Bunun üçün əgər unit və integration testlərimiz varsa onları run edirik və hər şeyin düzgün işlədiyindən əmin oluruq.
Təbii ki, .Net Framework-dən və həmçinin .Net Core-dan (xüsusi ilə 3.1 versiyasından qabaq) olan versiyalardan net5.0-a keçid zamanı xeyli şeylərə diqqət etməmiz lazımdır. Çünki struktur və işləmə şəkli olaraq bəzi şeylər dəyişilib.
Növbəti hissədə bizim bu mərhələdə qarşılaşdığımız problemləri analiz edəcəyik..