programowanie

Programista .NET na Linuxie cz. 1

Wprowadzenie

Cześć, tu Marek z firmy IT w Chmurach. Po dłuższej nieobecności wracamy z nowym wpisem. Dziś chcę pokazać wam w jaki sposób możecie pracować z dotnetem na Linuxie. Mimo upływu lat i zmian jakie przeszedł .NET Framework, wiele osób wciąż myśli że .NET == Windows. Nic bardziej mylnego. Od kilku lat .NET nie dość że jest multi-platformowy, co oznacza, że aplikacje napisane z jego użyciem możemy tworzyć i uruchamiać na takich platformach jak Linux, Mac oraz Windows, to jeszcze jest open source.

Ale, żeby nie było tak kolorowo, to musimy pamiętać, że multi-platformowość dotneta nie dotyczy aplikacji desktopowych. Aplikacje desktopowe napisane w Windows Forms czy WPF (Windows Presentation Foundation) nawet w najnowszej multi-platformowej wersji frameworka czyli .NET 7, w dalszym ciągu będą przywiązane do Windowsa. Wynika to z tego, że cała warstwa graficzna w tym wszystkie biblioteki obsługujące GUI, opierają się o API systemu Windows, które z wiadomych przyczyn nie jest kompatybilne z API interfejsów graficznych Linuxa czy iOSa.

Niemniej dla osób takich jak ja, czyli w większości tworzących przy pomocy .NET aplikacje internetowe oraz usługi, które nie mają swoich interfejsów graficznych, a jeżeli już mają to są one napisane w takich frameworkach jak Angular, React czy Blazor, które działają na wszystkich systemach operacyjnych, desktopowe ograniczenia .NET nie stanowią już problemu. 

Narzędzia

Największym wyzwaniem dla programistów .NET związanym z przesiadką na Linuxa, będzie próba zastąpienia Visual Studio. Niestety mimo wypuszczenia przez Microsoft wersji Visual Studio dla komputerów Mac, wciąż nie ma wersji Visual Studio, która działałaby na Linuxie i nie wiadomo czy w ogóle będzie. To co możemy zrobić w tej sytuacji to: 

  • kupić licencję na IDE Rider od JetBrains
  • użyć darmowego Visual Studio Code wraz z odpowiednimi wtyczkami, które pozwalają rozszerzyć VS Code o funkcje znane z Visual Studio

Minusem Ridera jest jego cena – 149 Euro za roczną subskrypcję dla osób indywidualnych. Plusem – działa na Linuxie, Windowsie i iOS oraz ma wiele funkcjonalności znanych z Visual Studio, które ułatwiają pracę.

VS Code z kolei jest darmowy, ale ma wiele ograniczeń, które możemy próbować obejść, korzystając z darmowych rozszerzeń i stuningować VS Code tak, aby mieć chociaż część funkcjonalności, jakie oferują wspomniane dwa duże IDE czyli Rider oraz Visual Studio.

Rozszerzenia VS Code dla .NET

C#

Pierwszą rzeczą jaką musimy zrobić po zainstalowaniu runtime i SDK .NET oraz VS Code jest dodanie rozszerzenia C# od Microsoft, które dostarcza narzędzia integrujące Visual Studio Code z kompilatorem oraz narzędzia do uruchamiania oraz debugowania kodu C#. Dzięki temu możemy uruchamiać aplikacje dotnetowe za pomocą klawisza F5, otrzymujemy debugger, oraz obsługę skrótów takich jak idź do implementacji czy idź do definicji. 

Mając zainstalowane rozszerzenie C#, utwórzmy przykładowy projekt ASP.NET Core i spróbujmy go uruchomić z poziomu VS Code. W tym celu przechodzimy do folderu w którym znajdzie się nasz projekt, z poziomu terminala wydajemy polecenie:

dotnet new webapp

Po utworzeniu projektu otwieramy go w Visual Studio Code za pomocą komendy:

code .

Wciskamy klawisz F5 i czekamy aż aplikacja się zbuduje i uruchomi. W przeglądarce powinna otworzyć się strona startowa aplikacji więc pierwszy krok za nami. 

Roslynator

Roslynator to jak nazwa wskazuje rozszerzenie wykorzystujące możliwości kompilatora Roslyn. Roslyn to kompilator open-source oferujący API dla języków C# i Visual Basic (VB.NET) dostarczający takich funkcji jak IntelliSense, nawigacja po kodzie, kolorowanie składni, analiza kodu i refaktoryzacja. Dzięki temu programiści mogą tworzyć swoje narzędzia do analizy kodu i refaktoryzacji. Przykładem takiego narzędzia jest właśnie Roslynator.

Spójrzmy na działanie Roslyn w praktyce. W poniższym kawałku kodu zagnieździliśmy dyrektywę using wewnętrz innej dyrektywy using. Jak widzimy przy wewnętrznym usingu pojawiło się podkreślenie sugerujące że coś możemy poprawić. Po najechaniu kursorem myszki pojawia się komunikat z kompilatora, że to wyrażenie może zostać uproszczone. 

Po zastosowaniu sugerowanych zmian otrzymamy następujący kod: 

Identyczne działanie zobaczymy w przypadku zagnieżdżonych instrukcji warunkowych, automatycznego uzupełniania wyrażeń switch-case, refaktoringu i wielu innych rzeczy. 

VS Code Solution Explorer

Kolejnym krokiem będzie zainstalowanie rozszerzenia o nazwie vscode-solution-explorer. Dzięki niemu otrzymujemy w Visual Studio Code panel widoku solucji znany z Visual Studio:

Dzięki temu rozszerzeniu możemy w łatwy sposób: 

  • Tworzyć solucje
  • Dodawać nowe projekty do solucji oraz je usuwać
  • Dodawać pliki klas, interfejsów, enumów oraz kontrolery na podstawie szablonów z możliwością tworzenia swoich własnych
  • Dodawać, usuwać referencje w projektach 
  • Zarządzać paczkami z repozytorium NuGet 
  • Budować, publikować, uruchamiać testy i wiele więcej

Oczywiście wszystkie te operacje możemy również wykonać z poziomu linii poleceń, ponieważ to rozszerzenie jest niczym innym jak nakładką graficzną i pod spodem wywoływane są normalne komendy dotnet CLI, co możemy zobaczyć w trakcie dodawania z poziomu vscode explorera do solucji projektu z testami xUnit, przełączając się na widok terminala:

.NET Core Test Explorer 

Pisanie testów czy to jednostkowych, integracyjnych, wydajnościowych czy jeszcze innych jest dobrą praktyką. Nie ma co tu nawet dyskutować. Aby w VS Code uruchamiać testy napisane w MSUnit, xUnit czy NUnit będziemy potrzebować dedykowanego rozszerzenia. Ja korzystam z .NET Core Test Explorer. Po zainstalowaniu rozszerzenia w pasku bocznym pojawi się ikona kolby Erlenmayera (stożkowe szkło laboratoryjne). Po przełączeniu się na widok eksploratora testów, zostaną wykryte wszystkie testy w solucji. Testy możemy uruchamiać klikając myszką na przycisk „play” w eksploratorze albo za pomocą skrótów klawiszowych (domyślnie Alt+R Alt+A).

Jak widzimy powyższy test zakończył się błędem mówiącym, że wskazany endpoint naszego API który chcieliśmy przetestować integracyjnie nie istnieje. Informacja o wyniku testu jest prezentowana w formie dużej ikonki X tuż nad sygnaturą metody testującej.

Podsumowanie

Powyższe rozszerzenia to absolutne minimum do tego, aby rozpocząć przygodę z programowaniem w dotnecie na Linuxie. Jeżeli znacie inne warte uwagi, koniecznie wspomnijcie o nich w komentarzu, a w kolejnym poście pokażę kilka dodatkowych rozszerzeń do VS Code, które nie są związane wyłącznie z programowaniem w .NET, ale usprawniają moją codzienną pracę.

Bonus – Material Icon Theme 

Dla osób, które tak jak ja przywiązują dużą wagę do wyglądu swojego IDE polecam rozszerzenie Material Icon Theme, które pozwoli zamienić standardowe ikony VS Code w te znane z Material Design.