IT Industrija

🔥 Najčitanije
🔥 Najčitanije
Prenosimo iskustva .NET developera koji su se igrali sa tranzicijom u poslednjih nekoliko meseci.
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 uradili. Pogledajte naš drugi blog post o ovome.
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.
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.
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 konzolna. Kada 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.
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.
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.
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.
.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.
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
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.
Želite da promenite veličinu slike? Žao mi je.
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.
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.
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.
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.
Objavio/la članak.
četvrtak, 8. Septembar, 2016.