iTechArt logo

Co nowego w Visual Studio 2022

Development & QA

8 listopada zadebiutowała oficjalna wersja Visual Studio 2022 (wersja 17.0) oraz platforma .NET 6. Środowisko zostało rozbudowane o kilka użytecznych funkcji oraz poprawek wizualnych. Postaram się opisać najważniejsze z nich.

Lukasz_Cichon.png

Łukasz Cichoń

Software Engineer

64-bitowa wersja Visual Studio

Jedną z podstawowych różnic w porównaniu z poprzednimi wersjami jest 64-bitowa architektura, na której oparte jest środowisko.

Visual studio od zawsze było 32-bitową aplikacją. Oznacza to, że główny proces (devenv.exe) był ograniczony do 4GB pamięci RAM. Przy mniejszych, mniej zasobożernych projektach nie miało to większego znaczenia, jednak przy rozbudowanych 4GB okazywało się być wąskim gardłem, szczególnie w momentach ładowania dużej ilości projektów w czasie uruchamiania solucji, bądź innych przypadków jak np. ładowanie dużych plików tekstowych w czasie debbugowania.

Przepięcie aplikacji na 64-bitową wersję spowodowało poprawę wydajności przede wszystkim w sytuacjach, gdy aplikacja wymagała większej ilości pamięci RAM niż mogła uzyskać. Należy jednak pamiętać, że w przypadku VS 2019 główny proces (IDE) działa w wersji 32-bitowej, ale samo środowisko składa się z szeregu komponentów, takich jak np. Roslyn (.NET Compiler Platform), które już wcześniej działały w wersji 64-bitowej.

Chcąc przetestować deklarowaną przez Microsoft poprawę wydajności między VS 2019 a VS 2022 stworzyłem solucję składającą się z 1000 projektów. Jest to prosta aplikacja typu Console Application, którą powieliłem za pomocą skryptu, a następnie załadowałem wszystkie projekty przez Visual Studio za pomocą dodatkowego rozszerzenia środowiska (Add Multiple Projects To Solution).

Następnie postanowiłem porównać czasy załadowania i zamknięcia solucji z podpiętymi projektami.
Parametry sprzętu: 

  • Ram - 32Gb,
  • Procesor - i5-1135g7 2.4ghz

VS 2019 – załadowanie solucji – około 55 sekund:

VS 2022 – załadowanie solucji – około 35 sekund:

VS 2019 – zamknięcie solucji – około 21 sekund:



VS 2022– zamknięcie solucji – około 7 sekund:



Testy jednoznacznie pokazały, że deklarowane przez Microsoft przyśpieszenie jest odczuwalne.
 

IntelliCode


IntelliCode jest kolejną funkcjonalnością wprowadzoną do Visual Studio 2022. Jak deklaruje Microsoft, dzięki AI, Visual Studio pozwala na rozszerzone, inteligentne podpowiadanie kodu, który może składać się z większego wyrażenia. W swoim działaniu przypomina GitHub’s Copilot, jednakże tutaj wybór podpowiedzi jest o wiele bardziej restrykcyjny, a to oznacza większą precyzję. Dodatkowo podpowiedź ogranicza się do danego wyrażenia, a nie jak w przypadku GitHub’s Copilot wprowadzania całych gotowych funkcji, które zostały zaczerpnięte z publicznych repozytoriów GitHub.

Po wyświetleniu takiej podpowiedzi możemy ją zaakceptować przez przycisk „Tab” bądź wybrać inną z rozwijanej listy:




Jako dane uczące dla AI wykorzystano tutaj około pół miliona publicznych repozytoriów GitHub. W czasie wprowadzania kodu silnik IntelliCode bierze pod uwagę kontekst, a więc miejsce, w którym aktualnie się znajdujemy. Potrafi dopasować wskazówki, wykorzystując wyuczone zastosowania, które zostały użyte w analogicznych sytuacjach w publicznych projektach. IntelliCode potrafi analizować:

  • Nazwy zmiennych i ich pozycje
  • Użyte biblioteki
  • Otaczający kod

W przykładzie widać, jak ze względu na to, iż został zastosowany nullable int, IntelliCode zaproponował w sekcji „if” sprawdzenie, czy wartość jest nullem, a w przypadku zastosowania wyjątku, wyświetlił wskazówkę o najbardziej pasującym rodzaj błędu. 

Prosta zabawa z kodem pokazuje moc tego rozwiązania, użyteczność, oraz możliwość zwiększenia efektywności pracy.


Hot Reload

Kolejna nowa funkcjonalność dotyczy szybkiego przeładowania zawartości np. strony w czasie działania aplikacji po dokonanych zmianach, bez konieczności restartowania aplikacji. 

Przede wszystkim należy zwrócić uwagę na przycisk „Hot Reload”, dzięki któremu osiągamy ten efekt.

Możemy również przyśpieszyć pracę przez zmianę w ustawieniach poprzez wybór, aby odświeżenie zawartości następowało po zapisaniu pliku. 

Ta funkcjonalność najbardziej kojarzy się z środowiskami front-end’owymi, gdzie zmiany na poziomie HTML’a, js bądź css są widoczne niemal natychmiast dzięki node.js. Biorąc to pod uwagę, bardzo dobrą informacją jest, że teraz tworzenie strony widokowej w .NET za pośrednictwem np. Blazor’a będzie o wiele wygodniejsze.

Rodzaje projektów, które będą wspierały tą funkcjonalność to np.:

  • WPF 
  • Windows Forms
  • ASP.NET Core apps code-behind 
  • Console applications

Jak widać, Hot Reload nie ogranicza się tylko do warstwy front-end’owej, ale ma również zastosowanie do back-end’u, dzięki czemu można w czasie debugowania problemu modyfikować kod, a co za tym idzie, szybciej odnaleźć potencjalny problem.

Istotną nowością, o której należy tutaj wspomnieć jest funkcjonalność dotycząca automatycznego odświeżania plików css po naniesieniu zmian. Na filmie poniżej widać, że zmiany w HTML’u wymagają wybrania przycisku HotReload (bądź zapisu pliku po wybraniu odpowiedniego settingu), natomiast zmiany w css’ie nanoszone są automatycznie.

Zmiany nie będą widoczne, gdy będą dotyczyć:

  • Sygnatury metod,
  • Sekcji usingów,
  • Modyfikacji interfejsów,
  • Zmiany nazw metod, pól itd.

Oznacza to, że możemy modyfikować kod, jednakże bez zmian strukturalnych, ponieważ będą one wymagały restartu, analogicznie jak w poprzednich wersjach środowiska.
 

Debug

W tej wersji zostały dodane 3 dodatkowe, użyteczne funkcjonalności związane z debugowaniem kodu.

  1. Force Run To Cursor - dzięki której w trybie debugowania można przejść bezpośrednio do wskazanej linii w kodzie z pominięciem wszystkich breakpoint’ów po drodze:

  2. Temporary breakpoint - dzięki niemu w czasie debugowania możemy zatrzymać się na konkretnej linii kodu (klasycznie). Po osiągnięciu breakpoint’a, jest on usuwany, a więc ten typ breakpoint’u pozwala na jednokrotne zatrzymanie się. 

  3. Dependent breakpoint – umożliwia dodanie breakpointa, który zostanie uwzględniony tylko wtedy, gdy spełnimy zadeklarowany warunek. W przykładzie poniżej został dodany warunek na breakpoint w środku metody TestTemporaryBreakpoint(). Ten warunek zostanie spełniony tylko wtedy, gdy wcześniej zostanie osiągnięty breakpoint z metody Second().

          

Odświeżony wygląd

W nowej odsłonie Visual Studio juz na pierwszy rzut oka widać inne ikony oraz ich rozmieszczenie w porównaniu do wersji z 2019 roku. Microsoft deklaruje, że dzięki odświeżeniu elementów graficznych praca w środowisku będzie znaczenie wygodniejsza. Czy tak będzie - każdy musi ocenić sam. Zmiany na plus powinni dostrzec szczególnie programiści używający ciemnego motywu. Delikatna zmiana odcienia koloru ma przełożyć się na mniej obciążony wzrok. Osobiście, używając ciemnego motywu w poprzedniej wersji, po kilku godzinach pracy miałem problem z precyzyjnym poruszaniem się między okienkami przez trudności z „trafianiem myszką” w poszczególny komponent. Najwyraźniej problem nie dotyczył tylko mnie, ponieważ w nowej wersji widać różnicę w  kolorowaniu elementów. Oczywiście wybór niestandardowych opcji dla wyglądu środowiska jest jak zwykle ogromny.

VS 2019:

VS 2022:

W skrócie - korzyści wizualne płynące z nowego Visual Studio to:

  • Przejrzystość,
  • Poprawa kontrastu,
  • Czytelność,
  • Ulepszenie ciemnego motywu,
  • Użyteczność,
  • Lepszy dobór kolorów,
  • Nowe ikony

 

Nowe szablony dla projektów frontendowych

Pojawiły się nowe rodzaje domyślnych szablonów dla środowisk js’owych. Jak widać poniżej, można wybrać wersję projektu „Standalone” dla Angulara oraz Reacta. Dzięki temu bez użycia poleceń konsolowych, w łatwy sposób można w środowisku VisualStudio uruchamiać projekty wyłącznie js’owe bez warstwy back-endowej. Myślę, że może być to pomocne dla programistów lubiących pracować i mieć wszystko w jednym środowisku. 

VS2019

VS 2022




Remote testing

Ciekawą funkcjonalnością dodaną w Visual Studio 2022 jest Remote testing. Dzięki niej środowisko pomaga w przetestowaniu naszej aplikacji na różnych platformach z poziomu Visual Studio, takich jak:

  • Windows
  • Linux containers
  • Wsl
  • Ssh 

W celu konfiguracji należy dodać dodatkowy plik: testEnvironments.json i umieścić go w katalogu solucji. W nim trzeba dodać wszystkie nazwy środowisk, na których będziemy chcieli uruchomić nasze testy. 


Jak widać powyżej, dodałem środowisko o nazwie „linux”, który jest obrazem dockerowym aplikacji. Dzięki temu w oknie testów (Test Explorer) pojawia się dodatkowy drop-down, gdzie mamy do wyboru środowisko lokalne, czyli Windows oraz środowisko Linux’owe osadzone w dockerze. W moim przypadku musiałem zrestartować solucję, ponieważ dodatkowe opcje nie były widoczne. Miejmy nadzieję, iż w kolejnych wersjach problem zostanie naprawiony.

W celu przetestowania funkcjonalności stworzyłem typowy test sprawdzający wersję systemu. 

W zależności od środowiska uruchomione testowe metody kończą się sukcesem bądź błędem. W momencie wykonania testu na środowisku dockerowym, potrzebny jest czas na stworzenie kontenera dockerowego na podstawie wcześniej utworzonego obrazu. Dzięki temu jesteśmy w stanie uruchomić testy bezpośrednio w kontenerze. Co więcej, możemy również debugować taki test.



Git – kilka repozytoriów w solucji

Aby móc używać kilku projektów osadzonych w różnych repozytoriach w Visual Studio 2019, należało otwierać każdy taki projekt w osobnej instancji Visual Studio. Niewątpliwie było to uciążliwe. Na szczęście w nowej wersji Visual Studio 2022 ten problem został rozwiązany. Aby móc korzystać z tej funkcjonalności należy włączyć ją w ustawieniach jak poniżej.

W momencie otworzenia takiej solucji bądź dodania do solucji projektu, który jest podpięty pod inne repozytorium, Visual Studio wykrywa to i we wszystkich dostępnych miejscach, gdzie pracujemy z GIT’em, mamy wybrane automatycznie wszystkie aktywne repozytoria. Multi-repo wspiera takie operacje jak:

  • amend
  • stash
  • branch switching
  • pull, push, fetch

W celu przetestowania funkcjonalności dodałem do solucji 2 projekty: Proj_1 oraz Proj_2. Obydwa są podpięte pod inne repozytorium.

W Visual Studio 2019 aktywnym repozytorium jest ostatnio dodane do solucji bądź to, które zostało wybrane ręcznie.

W widoku „Manage branches” byłoby widoczne tylko jedno repozytorium. W przypadku Visual Studio 2022 praca z projektami osadzonymi w różnych repozytoriach jest znacznie łatwiejsza. Środowisko automatycznie zauważa dwa różne repozytoria i obydwa są aktywne. Ta sama sytuacja ma miejsce w „Manage branches”, gdzie obydwa repozytoria są dostępne. Dzięki temu można zarządzać branchami w kontekście danego repozytorium. 

W czasie synchronizacji zmian możemy skorzystać z nowego „drop-downa”, dzięki czemu możemy wybrać więcej niż jedno repozytorium bądź wszystkie i w kontekście danego wyboru zarządzać zmianami.

 

.NET 6

Nowa wersja .NET również jest powodem do radości dla programistów z tego obszaru. Zakres zmian jest na tyle szeroki, że jest to temat na osobny artykuł. 

Warto jednak wspomnieć o jednej z najciekawszych nowości w .NET 6, którą wspiera Visual Studio, czyli .NET MAUI (Multi-platform App UI), na razie w wersji preview (oficjalna wersja ma zostać wydana w pierwszym kwartale 2022 roku). Dzięki tej funkcjonalności można budować natywne aplikacje na platformy takie jak: Widnows, iOS, macOS czy Android z wykorzystaniem tego samego kodu. To rozwiązanie przypomina działanie klasycznego Xamarin’a, jednak tutaj zastosowane zmiany są znacznie głębsze. Do tej pory Xamarin był odseparowaną platformą, natomiast w tym momencie jest integralną częścią ekosystemu .NET 6. Oznacza to nowe podejście w pisaniu aplikacji mobilnych na platformie .NET. MAUI zapewnia następujące benefity:

  • Współdzielenie tych samych zasobów takie jak np. zdjęcia między różnymi platformami
  • „Hot reload” przy modyfikacjach warstwy widokowej
  • Brak konieczności tworzenia osobnych projektów per platforma
  • Umożliwienie pisania aplikacji wieloplatformowych w Blazorze
  • Konkurencyjność względem innych rozwiązań mobilnych takich jak Flutter bądź React Native

Aby móc skorzystać z tej funkcjonalności w instalatorze należy w sekcji „Mobile development with .NET” wybrać opcję „.NET MAUI”.

Dzięki temu mamy dostępnych kilka rodzajów projektów:

Jak już wspomniałem, dzięki .Net MAUI nie trzeba tworzyć osobnych projektów dla konkretnej platformy. Są one odseparowane w katalogu „Platforms”.

To, jakich platform chcemy używać, jest zdefiniowane w pliku csproj w sekcjach „Target”.

Dzięki takiej konfiguracji Visual Studio umożliwia wybranie konkretnej platformy do uruchomienia aplikacji.

Podsumowanie

Visual Studio 2022 jest kolejną świetną odsłoną najpopularniejszego środowiska programistycznego dla programistów .NET. W porównaniu z wersją 2019 nie można jej nazwać rewolucją, ale na pewno udaną ewolucją. Oprócz opisanych zmian jest duża liczba innych interesujących zmian, z którymi warto się zapoznać.