Naar kennisoverzicht

Visual Studio 2017

Vorige maand was het dan eindelijk zo ver, de release van Visual Studio 2017!

Deze nieuwe versie zit natuurlijk bomvol verbeteringen van reeds bestaande functionaliteiten, maar ook zijn er verschillende nieuwe onderdelen toegevoegd aan het product. Met al deze verbeteringen en toevoegingen kan er wel worden gesteld dat Visual Studio 2017 de beste versie tot nu toe is. Het is een versie waar de gedachte ‘cloud-first, mobile-first’ centraal heeft gestaan, wat er op neer komt dat wij ontwikkelaars gebruik kunnen maken van al het moois dat er onlangs is toegevoegd aan Microsoft Azure en natuurlijk een verbeterde integratie met de Xamarin software!  Op 13 april 2017 werd er door 4Dotnet en de Dutch .NET Group een Visual Studio launch event georganiseerd waar ik enkele features van Visual Studio 2017 presenteer. Ook werd er, door Fanie Reynders, nog even stilgestaan bij de .NET Core CLI. Mocht het zo zijn dat je er niet bij hebt kunnen zijn, wees niet getreurd! De sessies zijn opgenomen en terug te kijken via de 4Dotnet event pagina. De onderdelen welke ik heb behandeld tijdens de sessie zijn onder andere de lightweight solution, de performance monitor, IntelliTest, live testing, dependency validation en de nieuwe exception helper window. Allemaal enorm handige features welke ons dagelijks werk in meer of mindere mate gaat helpen! Voor de volledigheid, hier nog de slides (SlideShare).

Visual Studio 2017 from Jan de Vries

En hieronder nog een (korte) samenvatting over hetgeen dat ik heb verteld.  

Performance

Een belangrijk onderdeel tijdens de ontwikkeling van Visual Studio 2017 is de performance van de gehele suite geweest. Dit is ook te merken in het dagelijks gebruik. Zo start de ontwikkelomgeving vele malen sneller op in vergelijking met de oudere versies. Ook is er een handige feature toegevoegd genaamd lightweight solution. Dit is een optie welke kan worden geactiveerd in een solution. Door deze optie te activeren zullen tijdens het inladen van de solution niet direct alle projecten worden ingeladen. Visual Studio analyseert van tevoren namelijk welke projecten noodzakelijk zijn en hoogstwaarschijnlijk zullen worden gebruikt nadat de solution is ingeladen. Dit kan natuurlijk grote voordelen hebben wanneer je werkt met een solution met tientallen of honderden projecten. Zeker wanneer deze geen direct afhankelijkheden met elkaar hebben. Tijdens de demo heb ik ook laten zien dat het initieel opstarten van de Roslyn solution met ongeveer 70% wordt versneld ten opzichte van Visual Studio 2015. Uiteraard is het grootste verschil dat je met Visual Studio 2015 gelijk aan de slag kunt met alle projecten welke zijn ingeladen. In het geval van Visual Studio 2017 kan het zo zijn dat een project nog niet is ingeladen en deze on-demand wordt opgevraagd. Dit heeft als nadeel dat je tijdens het opvragen van een niet-ingeladen project nog even moet wachten. Een nadeel waar ik zelf tegenaan ben gelopen is dat ook bij dynamisch ingeladen project afhankelijkheden, deze referenties logischerwijs ook niet worden herkend. Dit betekend dat niet alle benodigde projecten zullen worden ingeladen, inclusief de unit-test projecten. Advies bij de lightweight solution is dus ook dat je het prima kunt uitproberen, maar wanneer je tegen de limieten of problemen aanloopt, gelijk weer uit zetten. Ook zijn er ten tijde van de release nog enkele problemen met third-party extensies welke nog niet goed kunnen omgaan met dit type solutions. Mijn vermoeden is dat een lightweight solution vooral veel voordeel gaat bieden bij een microservices solution, waarbij alle projecten in 1 grote solution worden geplaatst. Of zo’n solution opzet een goed idee is, is een andere discussie.   Een andere, mooie, verbetering is de monitoring van Visual Studio. Alle onderdelen binnen de suite worden continu gemonitord op laadtijden en dergelijke. Wanneer je merkt dat de ontwikkelomgeving langzamer aan het worden is, kun je in dit venster controleren waar dit door wordt veroorzaakt en gelijk actie ondernemen.

  

Dit venster zit wel een klein beetje verstopt, namelijk onder het menu item Help –> Manage Visual Studio Performance.  

Testen

Een veelbesproken onderwerp is de mogelijkheid om live-testing te activeren binnen Visual Studio 2017. Deze nieuwe feature stelt je in staat om je gewijzigde code continu te testen. Zodra de code wijzigingen worden opgeslagen worden deze gecompileerd en gelijk getest. Visual Studio (of: Roslyn) is zelf slim genoeg om alleen maar een subset van de testen uit te voeren. Zodoende wordt er geen tijd verspilt aan het uitvoeren van tests waarvan de code niet is gewijzigd. Zelf heb ik geen grote performance impact op de ontwikkelomgeving gehad na het activeren van deze feature. Het activeren van Live Unit Testing is heel eenvoudig via het Test-menu binnen Visual Studio.

Mocht het zo zijn dat door het activeren van deze feature jouw ontwikkelomgeving te traag wordt om in te werken, dan is het advies om dit gelijk weer te deactiveren. Het is namelijk een handige optie, welke de ontwikkelwerkzaamheden enorm kunnen versnellen, maar het moet wel werkbaar blijven! Een andere optie is om een sneller ontwikkelstation te regelen, maar daar gaat vaak meer tijd in zitten. Ook is er nog kort gesproken over het automatisch genereren van unit testen met IntelliTest. IntelliTest is de commerciële doorontwikkeling van de library Pex. Het stelt ontwikkelaars in staat om automatisch testen te laten genereren aan de hand van de code. De IntelliTest libraries analyseren de code en genereren hier testcases voor.

Hoewel dit een enorm handige feature is om te controleren of de code werkt is het momenteel geen goed idee om dit te gaan gebruiken voor nieuwe ontwikkel trajecten. De gegenereerde unit testen zijn namelijk van slecht onderhoudbare kwaliteit. Uiteraard kan deze feature wel nuttig zijn in legacy trajecten, waar de code vaak niet testbaar is opgezet. Op deze manier krijg je toch een mooie baseline van testen, waardoor je relatief veilig aanpassingen kunt gaan maken op de ongeteste codebase. Het moge duidelijk zijn dat er verstandig moet worden omgesprongen met deze feature. Het is geen vrijbrief om zelf helemaal geen unittesten meer te gaan ontwikkelen!  

Dependency Validation

Een enorm mooie feature, welke waarschijnlijk door een groot aantal mensen nooit zal worden gebruikt, is Dependency Validation. Iemand in de rol van een software architect kan hiermee namelijk afhankelijkheden tussen verschillende klassen/namespaces definiëren. Een eenvoudig schema is hieronder weergegeven.

In dit schema is te zien dat de Controllers gebruik mogen maken van ViewModels en ProductSearch. Dit heeft als gevolg dat de ProductSearch klassen geen gebruik kunnen maken van klassen welke in de ViewModels namespace zitten. Wanneer een ontwikkelaar dit toch probeert te doen zal deze direct een compile-time error te zien krijgen.   Deze validaties kunnen worden ontworpen in een zogenaamd layer diagram. Helaas wordt deze functionaliteit in de praktijk bijna niet gebruikt voor het opstellen van een software architectuur. De reden hiervoor is vaak dat men niet weet dat het bestaat of dat het simpelweg teveel tijd in beslag neemt om dit continu bij te blijven werken.  

Debugging

Een enorme verbetering tijdens het debuggen is de nieuwe Exception Helper window.

Waar je voorheen werd geconfronteerd met een venster waar niet echt nuttige informatie in stond en je vaak zelf nog verschillende InnerExceptions diep moest kijken voor de exacte foutmelding, worden deze nu direct op je scherm getoond. De diepste InnerException wordt gelijk weergegeven en doormiddel van de pijltjes naar links en rechts onder in het venster kan er worden genavigeerd tussen de verschillende lagen van excepties. Een andere, kleine, toevoeging is de Run to Click optie. Tijdens het debuggen verschijnt er een soort van Play-knop in de textarea waarmee je kunt aangeven dat de debugger tot die ene regel uitgevoerd moet worden. Dit is vergelijkbaar met de Run to Cursor optie welke al jaren in Visual Studio beschikbaar is, maar nu is het via de muiscursor beschikbaar gemaakt.  

Overige verbeteringen

Het is onmogelijk om alle verbeteringen in 1 blogpost op te sommen. Mocht je hier interesse in hebben, dan zou je de release notes van Visual Studio 2017 kunnen doornemen. Persoonlijk vind ik onder andere de Docker integratie, Red Gate tooling en betere PowerShell Tools support de meest belangrijke toevoegingen.   Ik zou zeggen, download en installeer Visual Studio 2017 gelijk! Het is relatief veilig, aangezien je alle versies van Visual Studio tegenwoordig naast elkaar kunt installeren. Ook kun je vanaf Visual Studio 2017 zowel de Community, Professional en Enterprise versies naast elkaar installeren om ze met elkaar te vergelijken.   Eigenlijk ben ik wel benieuwd wat jouw favoriete (nieuwe) feature is in Visual Studio. Laat het weten via de comments, wellicht dat ikzelf en anderen hier ook nog iets aan hebben!