15 lekcija naučenih tokom prelaska na .NET Core sa ASP.NET-a

Prenosimo iskustva .NET developera koji su se igrali sa tranzicijom u poslednjih nekoliko meseci.

prenosimo
08/09/2016

1. Korišćenje xproj & csproj fajlova zajedno

Deluje da ne postoji mogućnost da se ova dva projekta oslone jedan na drugi. Pomerate sve u xproj, ali onda ne možete više koristiti MSBuild. Ako ste nalik nama, ovo znači da vaš trenutni setap sa build serverom neće raditi. Moguće je koristiti xproj i csproj fajlove u isto vreme, što smo konačno i uradiliPogledajte naš drugi blog post o ovome.

2. Građenje za deployment

Ako planirate da gradite aplikaciju koja cilja ne-Windows, morate je izgraditi na ciljanoj platformi. Drugim rečima, ne možete izgraditi aplikaciju na Windowsu, a potom je pokretati na Mac-u. Ovo možete uraditi sa netstandard bibliotekom, ali ne i sa netcoreapp. Nadaju se da će ukloniti ovo ograničenje u budućnosti.

3. NetStandard vs NetCoreApp1.0

U čemu je razlika? NetStandard je dizajniran kao opšti standard tako da .NET 4.5, Core, UWP, Xamarin i sve ostalo ima ciljani standard. Ako pravite deljenu biblioteku koja će biti NuGet paket, ona mora biti zasnovana na NetStandard-u.

Ako pravite aplikaciju, trebalo bi da ciljate NetCoreApp1.0 za framework AKO planirate da je razvijate na Mac-u ili Linuxu. Ako ciljate Windows, možete ciljati .NET 4.5.1 ili kasnije verzije.

4. IIS je mrtav, skoro

Kao deo .NET Core, Microsoft (i zajednica) je kreirao potpuno novi web server Kestrel. Cilj iza ovoga je bio da ga učine što više lean, mean i brzim. IIS je odličan, ali dolazi sa zastarelim pipeline modelom i nosi mnogo težine sa sobom. U nekim benchmarkovima sam video da Kestrel podnosi i to 20x više zahteva u sekundi. Ups!

Kestrel je, u suštini, deo .NET Core-a, što deployment vaše web aplikacije čini jednostavnim kao deployment bilo koje konzolne aplikacije. Činjenica je da je svaka aplikacija u .NET Core-u praktično konzolnaKada se vaša ASP.NET Core aplikacija pokrene, ona aktivira Kestrel web server, podešava HTTP veze i barata svime. Ovo je slično načinu na koji su self hosted Web Api projekti radili na Owin-u.

IIS nije mrtav za stvarno. Možete ga koristiti kao reverse proxy ispred Kestrela kako bi iskoristio prednost nekih osobina koje Kestrel nema. Stvari kao što su virtuelni hostovi, logovanje, bezbednost, itd.

Ako ste ikada kreirali self hosted web aplikaciju u Windowsu ili konzolnoj aplikaciji, sada sve funkcioniše mnogo drugačije. Jednostavno koristite Kestrel. Ni jedan od self hosted paketa za WebApi, SignalR i drugi nisu više potrebni. Svaka web aplikacija je sada self hosted.

5. HttpModule and HttpHandler su zamenjeni novim “middleware”-om

Middleware je dizajniran da služi kao zamena za modul-e i handler-e. Sličan je načinu na koji se Owin i drugi jezici nose sa ovom vrstom funkcionalnosti. Izuzetno su jednostavni za rad. Više o njima možete naučiti ovde. Dobra (i loša) vest jeste to da ih ne možete konfigurisati u config fajlu. Sve je podešeno u kodu.

6. FileStream je premešten na System.IO.FileSystem???

Neke osnovne klase koje svi koristimo na dnevnom nivou premeštene su u različite pakete. Nešto obično poput FileStream-a više nije u System.IO assembly reference/package. Sada morate da dodate paket System.IO.FileSystem. Zbunjujuće je jer koristimo namespace-ove klasa koji se ne poklapaju direktno sa paketima.

Ovaj sajt je izuzetno vredan za pronalaženje promena kod klasa i metoda.

7. StreamReader konstruktor više ne radi sa fajl putanjom

Neke proste upotrebe standardne biblioteke su se promenile.

Dobar primer je StreamReader, čijem konstruktoru se često slala putanja čitanog fajla. Danas mu se mora proslediti Stream. Ovo će prouzrokovati mala refaktorisanja kako bi se koristio FileStream uz StreamReader.

Još jedan dobar primer ovoga je vezan za refleksiju. GetType() sada vraća jednostavniji objekat iz razloga vezanih za performanse, a za potpune detalje morate obaviti GetTypeInfo(). Srećom, ovo je natraške kompatibilno sa .NET 4.5.

8. Kod specifičan za platformu… kao što je RSA specifičan za Microsoft

.NET Core je dizajniran da radi na Windows-u, Mac-u i Linux-u. Može se desiti da će deo vašeg koda kompajlirati na Windows-u, ali neće uspešno raditi na Mac-u ili Linux-u. Dobar primer ovoga je RSACryptoServiceProvider koji deluje korisno. Po pokretanju na Mac-u, reći će vam da “platforma nije podržana”.

Očigledno, API ovog RSI provajdera je specifičan za Windows. Morate koristiti RSA.Create() koji ima više generičku implementaciju i nešto drugačije metode. Oba su u System.Security.Cryptography. Zbunjujuće, zar ne? Stara poslovica, “If it builds, ship it!”, potpuno pada u vodu u ovom slučaju.

9. Newtonsoft  promenjen na difoltni camelCase kod field imena ?

Ovo je jedna od najvećih glavobolja konverzije. Newtonsoft je sada difoltno camelCase. Ovo bi izazvalo slom raznoraznih REST API-ja da koristite PascalCase.

Na kraju smo koristili JsonProperty atribut na nekim stvarima kako bismo iznudili casing kakav nam je bio potreban. Ovo je velika nagazna mina, te preporučujemo da je se pazite. #TeamPascalCase

10. Log4net ne radi, kao ni brojne druge zavisnosti, sem ako ne targetirate .NET 4.5!

Log4net je prilično osnovna biblioteka korišćena od strane mnogih developera. Za sada nije preneta na core. NLog i Serilog rade i moraćete promeniti logging provajdere.

Pre konvertovanja bilo čega na core, potrebno je da pregledate sve referencirane dll zavisnosti kako biste obezbedili da rade sa core-om. Ali dok god ciljate Windows, možete ciljati .NET 4.5.1 ili novije i koristiti sve trenutne zavisnosti! Ako radite kros-platformski… pazite se problema sa zavisnima.

11. System.Drawing ne postoji

Želite da promenite veličinu slike? Žao mi je.

12. DataSet i DataTable ne postoje

Ljudi ovo i dalje koriste? Zapravo, neki da. Mi smo koristili DataTables za slanje tabele podataka ka SQL uskladištenoj proceduri kao input parametar. Radi magično.

13. Alati za Visual Studio

Viđali smo mnogo čudnih stvari sa intellisense-om i Visual Studiom. Ponekad je to hajlajtovanje koda kao pogrešnog, a ispravnog kompajliranja. Mogućnost da se šetamo između targetovanih frameworka je sjajno za uzajamno testiranje koda.

Iako smo tek uklonili net451 kao ciljani framework sa mog projekta, Visual Studio i dalje misli da ga ciljamo… Ima bagova koje valja ispraviti.

14. Čudne promene na HttpWebRequest

Net 4.5 ima osobine koje morate podesiti na HttpWebRequest objektu, i ne možete ih podesiti kroz heder. Pa, kod core-a su odlučili da ovo obrnu, tako da morate koristiti kolekciju hedera. Ovo zahteva malo hakovanja i usmeravanja kompajlera… U suprotnom dobićete greške poput ove od svog .NET 4.5 koda:

The ‘User-Agent’ header must be modified using the appropriate property or method. We need some extension methods for core to make it backwards compatible.

15. Kreiranje Windows Service-a u .NET Core

Moguće je pokrenuti aplikaciju kao Windows Service, ali se to radi drugačije. U .NET 4.5 napravili biste klasu koja nasleđuje od ServiceBase kao i Installer klasu da doprinese instaliranju. U core-u samo očekuju da koristite komandnu liniju za instalaciju usluge.

Stack Overflow fino pokriva ovu temu.


Tekst je u celosti preuzet i preveden sa bloga kompanije Stackify. U originalu ga možete pročitati ovde.

prenosimo

Objavio/la članak.

četvrtak, 8. Septembar, 2016.

IT Industrija

🔥 Najčitanije

Join us @ Hot AI Summer