Aplikacje desktopowe i .Net Core

Co to jest .Net Core? Jakie są różnice pomiędzy .NET Core, a .NET Framework? Który z nich wybrać do tworzenia własnych aplikacji desktopowych? W tym artykule postaram się odpowiedzieć na te pytania. Pokażę także jak utworzyć pierwsze aplikacje WinForms oraz WPF w .Net Core.

Co to jest .Net Core?

Na samym początku przypomnę czym jest .NET Framework. Pozwoli to na lepsze zrozumienie odpowiedzi na pytanie – Co to jest .Net Core? .NET Framework to platforma programistyczna opracowana przez Microsoft obejmująca środowisko uruchomieniowe (CLR) oraz biblioteki klas dostarczające standardowej funkcjonalności dla aplikacji. Warto zauważyć, że technologia ta nie jest związana z żadnym konkretnym językiem programowania. Programy mogą być pisane w jednym z wielu języków, np. C++, C#, Visual Basic, chociaż dominującym jest język C#. Framework dostarcza między innymi mechanizm zarządzania pamięcią (Garbage Collector), a także wiele predefiniowanych typów danych. Programiści używają .NET Framework do tworzenia aplikacji desktopowych (Windows) oraz aplikacji webowych. Czym w takim razie jest .NET Core? .NET Core to wieloplatformowy i oparty na otwartym kodzie źródłowym framework, wykorzystywany do tworzenia aplikacji na dowolnej platformie. Oznacza to, że program napisany w .NET Core będzie działać zarówno na systemach Windows, Linux i macOS. Idea działania .NET Core opiera się na pakietach NuGet.

NuGet jest managerem pakietów dla .NET. Projekt ma na celu ułatwienie dodawania zewnętrznych bibliotek do projektu. Pakiet NuGet to pojedynczy plik ZIP z rozszerzeniem .nupkg, który zawiera skompilowany kod (dll), inne pliki związane z tym kodem i manifest opisowy zawierający informacje takie jak numer wersji pakietu. Deweloperzy udostępniają utworzone pakiety publikując je na hoście publicznym lub prywatnym. Odbiorcy pakietu uzyskują dostęp do pakietów z odpowiednich hostów, dodają je do swoich projektów, a następnie wywołują odpowiednie funkcje pakietu w kodzie projektu. Samo narzędzie NuGet obsługuje wszystkie szczegóły pośrednie.

Cały .NET Core to jeden wielki pakiet NuGet. Takie podejście idealnie sprawdza się w aplikacjach webowych, ponieważ razem z .NET Core dostajemy także ASP.NET Core (platforma do budowy nowoczesnych aplikacji internetowych), co oznacza, że będziemy mogli hostować nasze aplikacje webowe nie tylko na Windowsie, ale także na Linuxie oraz macOS’ie. .NET Core składa się z podstawowej biblioteki klas CoreFX, środowiska uruchomieniowego CoreClr, CoreRT – .NET Native runtimes oraz CLI (command-line interface). Podsumowując, w .NET Core dostajemy wieloplatformowość, modularność i niezależność od .NET Framework (każda aplikacja może korzystać z innej wersji) oraz otwarty kod źródłowy. .NET Core stał się standardem przy tworzeniu aplikacji w chmurze lub przerabianiu obecnych aplikacji biznesowych na architekturę mikoserwisów.

Jakie są różnice pomiędzy .NET Core, a .NET Framework?

Microsoft obsługuje i wspiera oba środowiska uruchomieniowe – dzielą one również wiele wspólnych API. Jeżeli kiedyś spotkacie się z nazwą .NET Standard – są to właśnie współdzielone biblioteki.

Poniżej przedstawię krótką listę kluczowych cech .NET Core, których nie znajdziemy w .NET Framework:

  • Wieloplatformowość.
  • Otwarty kod źródłowy.
  • Nowe funkcje, których nie ma w .NET Framework.
  • Możliwość tworzenia jednego wspólnego zbioru bibliotek, wspieranego przez wiele platform (Linux, macOS, Windows).
  • Możliwość używania wyłącznie bibliotek wymaganych przez aplikację. Reszta bibliotek (CoreFX) jest wbudowana dla uzyskania minimalnych zależności.
  • Mniejszy wpływ na aktualizacje, ponieważ aktualizowane są tylko wykorzystywane pakiety.
  •  .NET Core jest zdecydowanie szybszy od zwykłego .NET Frameworka
  •  .NET Core działa jako zestaw pakietów NuGet, które aktualizujemy za pomocą managera pakietów. Natomiast .NET Framework jest to komponent Windows, który jest aktualizowany za pomocą Windows Updates – narzędzia wbudowanego w system Windows.
  • Możliwość równoległego wdrażanie aplikacji na różnych wersjach .NET Core.

Który framework wybrać do tworzenia własnych aplikacji desktopowych?

Znalezione obrazy dla zapytania .net core vs .net framework

Wieloplatformowy i oparty na otwartym kodzie źródłowym .NET Core może być wykorzystywany do tworzenia aplikacji na dowolnej platformie. Często używany jest do tworzenia aplikacji w chmurze lub przerabianiu obecnych aplikacji biznesowych na architekturę mikoserwisów. .NET Framework jest ściśle powiązany z systemem Windows. W głównej mierze używany jest do tworzenia aplikacji desktopowych oraz dużych aplikacji biznesowych.

Kiedy używać .NET Core?

  • Podczas tworzenia nowego projektu.
  • Wymagana jest wieloplatformowość aplikacji.
  • Aplikacja jest oparta na mikroserwisach.
  • Wymagana jest skalowalność aplikacji przy wykorzystaniu konteneryzacji.

Kiedy używać .NET Framework?

  • Podczas utrzymania istniejącego projektu, który nie jest już rozwijany.
  • Aplikacja używa zewnętrznych bibliotek niewspieranych przez .NET Core.
  • W aplikacji wykorzystane są technologie jeszcze niedostępne w .NET Core (np. ASP.NET Web Forms, ASP.NET Web Pages, WCF, Windows Workflow Foundation, Workflow Services).

Pozostaje pytanie co wybrać w przypadku istniejącego projektu w .NET Framework, który nadal jest w fazie developmentu? Wtedy trzeba przeanalizować wszystkie plusy i minusy wykorzystania danego framework’a oraz ewentualne koszty migracji z .NET Framework na .NET Core i podjąć decyzję.

Pierwsze aplikacje w WinForms oraz WPF w .NET Core

Windows Forms (WinForms ) to nazwa interfejsu programowania graficznych aplikacji (API) w ramach Microsoft .NET Framework. WinForms pozwala na łatwe tworzenie aplikacji desktopowych zawierających graficzny interfejs użytkownika. Aplikacje Windows Forms bazują na zdarzeniach wspieranych przez Microsoft .NET Framework. Oznacza to, że w trakcie działania aplikacji czeka ona na wykonanie przez użytkownika czynności, np. pisanie tekstu do pola tekstowego lub kliknięcie przycisku.

Tworzenie aplikacji z wykorzystaniem Windows Forms jest jednym z najłatwiejszych sposobów, żeby rozpocząć swoją przygodę z programowaniem. 

Obecnie miejsce aplikacji Windows Forms jest zajmowane przez aplikacje WPF, które są tworzone przy użyciu języka XAML. WPF (Windows Presentation Foundation) to nazwa silnika graficznego i API bazującego na .NET 3. WPF integruje interfejs użytkownika, grafikę 2D i 3D, multimedia, dokumenty oraz generowanie/rozpoznawanie mowy. Choć domyślnie aplikacje WPF piszemy z wykorzystaniem code-behind, to zaleca się stosowanie w tym przypadku wzorca MVVM, do którego ta technologia jest przystosowana. Wzorzec MVVM (Model-View-ViewModel) umożliwia oddzielenie warstwy prezentacji od warstwy logiki aplikacji. Dzięki temu można w łatwy sposób stworzyć aplikację, która jest testowalna, prosta w rozbudowie i pozwala na uzyskanie wysokiej reużywalności kodu w przyszłych projektach.

Przygotowanie środowiska

Do tworzenia aplikacji desktopowych WinForms oraz WPF z wykorzystaniem Designera w .NET Core zaleca się uaktualnienie framewroka do wersji 3.1. Zatem po pierwsze należy zainstalować .NET Core 3.1. Kolejną kwestią jest środowisko programistyczne. Designer Windows Forms w .NET Core został udostępniony w wersji Visual Studio 16.5 Preview 1. Czyli w następnej kolejności należy zainstalować Visual Studio 16.5 Preview 1, albo nowszą wersję środowiska. Ostatnią czynnością jest uaktywnienie Designera w Visual Studio. Na pasku narzędzi należy wybrać Tools > Options > Environment > Preview Features i zaznaczyć Use the preview Windows Forms designer for .NET Core apps option.

W przypadku braku okna Toolbox, należy wybrać na pasku narzędzi View> Toolbox. Natomiast w przypadku braku okna Solution Explorer należy wybrać na pasku narzędzi View> Solution Explorer. 

Tworzenie aplikacji WinForms

1. Uruchamiam Visual Studio 2019 Preview.

2. Wybieram Create a new project.

3. Wybieram typ projektu Windows Forms App (.NET Core) i klikam Next.

4. Pozostawiam domyślną nazwę projektu, lokalizację oraz nazwę solucji. Klikam Create.

5. Uruchamiam aplikację.

Na ekranie wyświetla się pusty formularz.

6. Klikam dwukrotnie na formularz Form1 w Solution Explorer’ze aby otworzyć go w Designer’ze.

7. W ToolBox’ie wyszukuję kontrolkę TextBox, czyli pole tekstowe.

8. Przeciągam i upuszczam kontrolkę TextBox na formularz. Zmieniam rozmiar pola tekstowego oraz nazwę na HelloTextBox.

9. W ToolBox’ie wyszukuję kontrolkę Button, czyli przycisk.

10. Przeciągam i upuszczam kontrolkę Button na formularz. Zmieniam rozmiar przycisku oraz nazwę na HelloButton.

11. Zmieniam tekst na przycisku na Say Hello.

12. Dwuktorne kliknięcie przycisku powoduje utworzenie metody HelloButton_Click oraz subskrypcję (podpięcie) pod zdarzenie Click kontrolki HelloButton. Metoda HelloButton_Click zostanie wywołana w momencie kliknięcia na przycisk.

13. W metodzie HelloButton_Click ustawiam właściwość Text pola tekstowego HelloTextBox na Hello .NET Core!

14. Uruchamiam aplikację. Po kliknięciu na przycisk Say Hello w polu tekstowym pojawia się tekst Hello .NET Core! 

Tworzenie aplikacji WPF

1. Uruchamiam Visual Studio 2019 Preview.

2. Wybieram Create a new project.

3. Wybieram typ projektu WPF App (.NET Core) i klikam Next.

4. Pozostawiam domyślną nazwę projektu, lokalizację oraz nazwę solucji. Klikam Create.

5. Uruchamiam aplikację.

Na ekranie wyświetla się pusty formularz.

6. Na zakładce MainWindow.xaml wyświetla się okno z Designer’em formularza. Poniżej znajduje się kod XAML. Modyfikacji na formularzu można dokonywać przeciągając i upuszczjąc kontrolki z ToolBox’a oraz zmieniając właściwości, albo też bezpośrednio modyfikując kod XAML.

7. W ToolBox’ie wyszukuję kontrolkę TextBox, czyli pole tekstowe.

8. Przeciągam i upuszczam kontrolkę TextBox na formularz. Zmieniam nazwę pola tekstowego.

9. Usuwam zawartość pola tekstowego – właściwość Content w Common.

10. Zmieniam rozmiar pola tekstowego.

11. Przeciągam i upuszczam kontrolkę Button na formularz. Zmieniam nazwę przycisku na HelloButton.

12. Zmieniam tekst na przycisku na Say Hello.

13. Dwuktorne kliknięcie przycisku powoduje utworzenie metody HelloButton_Click oraz subskrypcję (podpięcie) pod zdarzenie Click kontrolki HelloButton. Metoda HelloButton_Click zostanie wywołana w momencie kliknięcia na przycisk.

14. W metodzie HelloButton_Click ustawiam właściwość Text pola tekstowego HelloTextBox na Hello .NET Core!

15. Uruchamiam aplikację. Po kliknięciu na przycisk Say Hello w polu tekstowym pojawia się tekst Hello .NET Core! 

Podsumowanie

Technologie Windows Forms oraz WPF otrzymują pełne wsparcie w .Net Core 3.1. Nie oznacza to jednak, że aplikację desktopową Windows Forms/WPF uruchomimy na systemach Linux i macOS. Zarówno Windows Forms jak i WPF są zbyt głęboko związane z ekosystemem Windows. Zarówno aplikacje WPF jak i WindowsForms w połączeniu z .Net Core 3 odpalimy nadal jedynie na systemie Windows.

Co w takim razie zysukjemy z .Net Core 3.1 w kontekście aplikacji desktopowych?

Przede wszystkim wydajność. Trzeba też wziąć pod uwagę, że na chwilę obecną stanowisko Microsoftu jest takie, że klasyczny .NET Framework, będzie głównie utrzymywany, a wszystko co innowacyjne i rozwojowe, trafiało będzie do .NET Core. Drugą ciekawą cechą jest niezależność od zainstalowanej na maszynie wersji .Net Framwork. Możemy tworzyć aplikację, która będzie zawierać zintegrowany w sobie również sam framework .Net Core.