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ó.↩
aistvan
2024.04.21. @ 15:55
Elírást tartalmaz a következő mondat: Lehetőség van az alkalmazások olyan közzétételére is, amihez nem később a .NET futtatókörnyezetet telepíteni.
Ruzsinszki Gábor
2024.04.26. @ 08:43
Köszönöm az észrevételt, javítottam.