A .NET Core óta a .NET keretrendszer rendelkezik egy parancssoros eszközzel is, ami lehetÅ‘vé teszi projektek létrehozását, fordÃtását és a tesztek futtatását is. Ez több elÅ‘nnyel is jár.
Az elsÅ‘ elÅ‘ny, hogy bármilyen szövegszerkesztÅ‘ segÃtségével készÃthetünk Ãgy .NET alkalmazást. A másik elÅ‘ny pedig az, hogy Ãgy könnyebb DevOps1 keretrendszerekbe integrálni a C# fejlesztést.
A .NET parancssoros eszközt a dotnet parancs kiadásával tudjuk aktiválni. Ez a parancs elérhetÅ‘ a rendszeren, ha telepÃtve van a .NET Core, .NET 5 vagy .NET 6 SDK. Ha van Visual Studio 2019 vagy újabb telepÃtve a gépünkre, akkor biztos, hogy rendelkezünk az eszközzel.
A dotnet parancs teljes és aktuális leÃrását a https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet cÃmen találjuk.
Projekt létrehozása
Projektet a new alparancs kiadásával tudunk létrehozni. A new után meg kell adnunk, hogy milyen tÃpusú projektet szeretnénk készÃteni. A létrehozható projektek tÃpusa SDK verziónként eltérÅ‘, ezért a projektek tÃpusáról a dotnet new --list kiadásával tudunk meggyÅ‘zÅ‘dni, ami valami hasonló kimenetet fog produkálni:
Template Name Short Name Language Tags
-------------------------------------------- ------------------- ---------- --------------------------
ASP.NET Core Empty web [C#],F# Web/Empty
ASP.NET Core gRPC Service grpc [C#] Web/gRPC
ASP.NET Core Web API webapi [C#],F# Web/WebAPI
ASP.NET Core Web App webapp,razor [C#] Web/MVC/Razor Pages
ASP.NET Core Web App (Model-View-Controller) mvc [C#],F# Web/MVC
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
Blazor Server App blazorserver [C#] Web/Blazor
Blazor WebAssembly App blazorwasm [C#] Web/Blazor/WebAssembly/PWA
Class Library classlib [C#],F#,VB Common/Library
Console Application console [C#],F#,VB Common/Console
dotnet gitignore file gitignore Config
Dotnet local tool manifest file tool-manifest Config
EditorConfig file editorconfig Config
global.json file globaljson Config
MSTest Test Project mstest [C#],F#,VB Test/MSTest
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
NuGet Config nugetconfig Config
NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit
NUnit 3 Test Project nunit [C#],F#,VB Test/NUnit
Protocol Buffer File proto Web/gRPC
Razor Class Library razorclasslib [C#] Web/Razor/Library
Razor Component razorcomponent [C#] Web/ASP.NET
Razor Page page [C#] Web/ASP.NET
Solution File sln Solution
Web Config webconfig Config
Windows Forms App winforms [C#],VB Common/WinForms
Windows Forms Class Library winformslib [C#],VB Common/WinForms
Windows Forms Control Library winformscontrollib [C#],VB Common/WinForms
Worker Service worker [C#],F# Common/Worker/Web
WPF Application wpf [C#],VB Common/WPF
WPF Class Library wpflib [C#],VB Common/WPF
WPF Custom Control Library wpfcustomcontrollib [C#],VB Common/WPF
WPF User Control Library wpfusercontrollib [C#],VB Common/WPF
xUnit Test Project xunit [C#],F#,VB Test/xUnit
A táblázat második és harmadik oszlopa az érdekes számunkra. Ez adja meg az alparancs nevét, amit ki kell adnunk, illetve a 3. oszlopból kiderül, hogy milyen programozási nyelveket használhatunk az adott projekt tÃpushoz. Ha nem adunk meg nyelvet, akkor alapértelmezetten a szögletes zárójelben lévÅ‘ fog érvényesülni, ami nem meglepÅ‘ módon a C#.
Konzol alkalmazást az alábbi parancs kiadásával tudunk létrehozni:
dotnet new console
Ez a jelenlegi mappában generálni fog egy Program.cs fájlt és a mappa nevével megegyezÅ‘ nevű csproj kiterjesztésű fájlt, ami a projekt beállÃtásait tartalmazza. Ha egyedileg el szeretnénk nevezni a projektet és nem szeretnénk, hogy a jelenlegi mappa neve határozza ezt meg, akkor ezt a -n vagy --name kapcsoló megadásával tudjuk megtenni:
dotnet new console --name "Teszt"
A parancs hatására az idézÅ‘jelekben megadott néven létre fog jönni egy almappa a jelenlegi mappában, ami a korábban emlÃtett Program.cs és csproj kiterjesztésű fájlt tartalmazza.
Ha nyelvet szeretnénk változtatni, akkor azt a -lang vagy --language kapcsoló kiadásával tudjuk megtenni, ami után idézÅ‘jelek között a használni kÃvánt programozási nyelvet kell megadnunk:
dotnet new console --name "FsharpTeszt" -lang "F#"
Solution fájl létrehozása és projektek hozzáadása
A Visual Studio és alapvetően az egész .NET solution fájlokban gondolkozik. A solution fájl egy vagy több projektet tartalmazhat. Létrehozása nem kötelező, ha csak parancssorból akarunk dolgozni, de erősen ajánlott, ha a projektünket Visual Studio-ban is szeretnénk később használni és nem akarunk vesződni az első alkalommal a solution fájl létrehozásával.
Ha pedig a programunk több projektbÅ‘l is áll majd, akkor létrehozása elengedhetetlen. Új solution fájlt szintén a new parancs segÃtségével hozhatunk létre:
dotnet new sln --name "TesztProgramok"
A fenti parancs hatására létrejön a TesztProgramok.sln fájl az aktuális mappában. De ez még önmagában semmire sem jó, mivel nem tartalmaz projekteket. A meglévő projektjeinket az sln fájlhoz a dotnet parancs sln parancsával tudjuk hozzáadni:
dotnet sln "TesztProgramok.sln" add TesztApp
Ha a jelenlegi mappa csak egy darab .sln fájlt tartalmaz, akkor nem kell megadnunk a nevét. Az add után a korábban létrehozott projekt nevét kell megadni. Ha nem a jelenlegi mappának egy almappájában található, akkor relatÃv vagy abszolút elérési útvonallal kell rá hivatkoznunk például:
dotnet sln "TesztProgramok.sln" add ..\Mappa\TesztApp
dotnet sln "TesztProgramok.sln" add "d:\mappa\Projekt"
Az első példában a TesztProgramok.sln fájlhoz képest adjuk meg a fájl nevét. Ha a fájlunk a d:\teszt almappávan van, akkor a megadott hivatkozás (..\Mappa\TesztApp) valójában a d:\Mappa\TesztApp-ra mutat.
Projektet eltávolÃtani az sln fájlból a remove utasÃtással tudunk:
dotnet sln "TesztProgramok.sln" remove TesztApp
Projektek fordÃtása
Projektet a build alparancs segÃtségével tudunk fordÃtani. Ezt egy olyan mappából tudjuk megtenni, amiben található legalább egy .sln vagy .csproj kiterjesztésű fájl. Ha a mappában több .sln vagy .csproj fájl is van, akkor meg kell adnunk a fordÃtandó projekt nevét:
dotnet build "TesztProgramok.sln"
A parancs hatására lefordul az alkalmazás és létrejönnek a futtatható fájlok a projektek kimeneti mappáiban. Ezek Windows esetén .exe fájlok, amelyek egyszerűen indÃthatóak.
A fordÃtás során megadhatunk konfigurációt is a -c vagy --configuration kapcsolókkal. Minden .NET projekt alapértelmezetten két konfigurációval rendelkezik. Az egyik a Debug, a másik a Release. A debug konfiguráció kifejezetten hibakeresésre lett kitalálva, Ãgy a fordÃtott bináris részletes hibakeresési szimbólumokat tartalmaz. Ennek egy következménye, hogy a bináris mérete nagyobb és nem tartalmaz optimalizációkat, mivel az optimalizációk megnehezÃtenék a program hibakeresését.
A release konfiguráció ezzel szemben minimális, vagy semmilyen hibakeresési szimbólumot nem tartalmaz és a kód fordÃtás közben optimalizáción is átesik. Ez a konfiguráció, mint ahogy a neve is mutatja, kifejezetten kiadásra lett kitalálva. Ez azt jelenti, hogy ha az alkalmazásunkat közzé szeretnénk tenni, akkor Release konfigurációt kell fordÃtanunk:
dotnet build "TesztProgramok.sln" -c Release
Programok futtatása
Windows esetén a lefordÃtott bináris .exe fájlok dupla kattintással vagy a parancssorból közvetlenül futtathatóak. Linux és Mac rendszereken egy kiterjesztés nélküli ELF formátumú fájl generálódik, amit hasonlóan egyszerűen tudunk futtatni.
Ezek a generált fájlok egyfajta betöltÅ‘k, nem natÃv programok. Futtatásukhoz a gépen szükséges a .NET futtatókörnyezet megléte, ami az SDK-ban benne van, viszont mások gépére telepÃteni kell.2
Hot reload
A .NET 6.0 újdonsága, hogy a korábbi Visual Studio funkció, a hot reload keretrendszer szintre került. Ennek leginkább technikai okai voltak. A hot reload hibakeresés közbeni változások azonnali, újrafordÃtás nélküli alkalmazását teszi lehetÅ‘vé. AmÃg ez a funkció Visual Studio szinten volt csak elérhetÅ‘, addig voltak limitációi és gyerekbetegségei, mivel egy éppen futó kódot nem éppen triviális átÃrni.
A menet közbeni változások használatához a programunkat a következÅ‘ parancs segÃtségével kell elindÃtanunk:
dotnet watch run [program.exe]
Az Ãgy indÃtott programunk esetén a forráskód menet közbeni változása azonnal hatással lesz a program működésére. Természetesen vannak azért limitációi a dolognak:
- A legjobban DEBUG konfiguráció esetén működik a dolog
- Rendelkeznünk kell a program forráskódjával
-
"A DevOps a szoftverfejlesztÅ‘k és a szoftvereket üzemeltetÅ‘k szoros együttműködésén alapuló gyakorlat. EgyesÃti a szoftverfejlesztést (Development), és az üzemeltetést (Operation), ezzel meggyorsÃtva és hatékonyabbá téve a munkát. Ebben a rendszerben a fejlesztÅ‘i csapat a ciklus elejétÅ‘l eszközökkel támogatja az üzemeltetést (deploy scriptek, automatikus diagnosztikai eszközök, terhelés-, és performanciatesztelési eszközök) mely a ciklus elÅ‘tt, közben, és után is hasznos visszajelzéseket küld." – https://hu.wikipedia.org/wiki/DevOps↩
-
LehetÅ‘ség van az alkalmazások olyan közzétételére is, amihez nem kell késÅ‘bb a .NET futtatókörnyezetet telepÃteni. ErrÅ‘l a 13. fejezetben lesz részletesen szó.↩