Vezérlőpult
A4. Forrás- és konfigurációs fájlok · Bevezetés, környezet, Git

A blokk · Bevezetés, környezet, Git · 4. tananyag

Forrás- és konfigurációs fájlok

Egy C#-projekt nem egyetlen fájl, hanem egy kis világ: forráskód, projektfájl, és két mappa, amelyet „valaki” folyton teleír. Ez a fejezet térképet ad: mit írsz te, mit ír a gép, és mi mondja meg a fordítónak, mit csináljon — a végén pedig azt is látod, hogyan lesz mindebből egyetlen futtatható .exe.

2 tanóraElmélet + gyakorlatParancssoros gyakorlattal

Tanulási célok

1Egy konzolos projekt anatómiája

Így néz ki egy frissen létrehozott, egyszer már lefordított konzolos projekt:

Mastermind/                        ← a projekt mappája
├─ Program.cs                      ← FORRÁSKÓD — ezt írod te
├─ Mastermind.csproj               ← PROJEKTFÁJL — beállítások a fordítónak
├─ bin/                            ← KÉSZ PROGRAM — a fordítás végterméke
│  └─ Debug/
│     └─ net10.0/
│        ├─ Mastermind.exe         ← ezt indítod el
│        ├─ Mastermind.dll         ← ebben van az IL-kódod (A3!)
│        └─ 
└─ obj/                            ← MŰHELY — a fordító ideiglenes fájljai
   └─ 

Négyféle szereplő, négyféle szabály:

MiKi írja?Szabad szerkeszteni?Gitre való?
*.cs forrásfájlokteigen — ez a munkádigen
*.csproj projektfájla sablon + néha teóvatosanigen
bin/a fordítónemnem
obj/a fordítónemnem
⛔ VESZÉLY

A bin és az obj tartalmát a fordító minden fordításkor újraírja. Amit oda mentesz vagy ott szerkesztesz, az elvész. És mivel újratermelődik, a Gitre sem való — erre (az A7 fejezetben vesszük) a .gitignore fájl lesz a megoldás.

Ki írja ezt a fájlt?

Döntsd el mindegyikről: te írod, beállítás, vagy a fordító terméke?

1 / 8Pontszám: 0

2A forrásfájlok: *.cs

A .cs kiterjesztésű fájlokban van a C#-kód. Egy projektben bármennyi forrásfájl lehet — a fordító a projektmappa összes .cs fájlját lefordítja, külön felsorolás nélkül. Ahogy nő a program, úgy bontjuk majd több fájlra (a Konzol segédosztályunk is saját fájlt kap).

Két sor, amivel sok fájl elején találkozol majd:

using System.Text;        // névtér „importálása” — kész osztályok elérése

namespace Mastermind;     // a saját kódod névtere

3A projektfájl: *.csproj

A .csproj a projekt személyi igazolványa: XML-formátumú beállításfájl, amely megmondja a fordítónak, mit és hogyan fordítson. Egy friss konzolos projekté így néz ki:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Mit jelentenek ezek a kulcsok?

KulcsLehetséges értékekMit csinál?
Sdk (a Project elemen) Microsoft.NET.Sdk, …Sdk.Web, … megmondja, milyen típusú projektről van szó — a sima Sdk a konzolos/könyvtár projekt
OutputType Exe, Library, WinExe Exe = futtatható program készül; Library = csak .dll, más programok használják; WinExe = ablakos program, konzol nélkül (L blokk)
TargetFramework net10.0, net8.0, … melyik .NET-verzióra forduljon a kód — nálunk mindig net10.0
ImplicitUsings enable, disable enable: az alap névterek (System, System.IO, …) automatikusan importálódnak — ezért nem kell using System;
Nullable enable, disable enable: a fordító figyelmeztet, ha egy érték null lehet, és te nem kezeled — a H blokkban lesz főszereplő
ℹ️ JÓ TUDNI

A .csproj-t ritkán kell kézzel szerkeszteni: a Visual Studio a legtöbb beállítást felületről intézi, és a NuGet-csomagok is ide jegyződnek be automatikusan. De amikor egyszer mégis bele kell nézni, jó, ha nem idegen.

4bin és obj — a végtermék és a műhely

A Debug mellett létezik Release mód is: optimalizált, gyorsabb, hibakereső-információk nélküli változat — ezt adnád ki a felhasználóknak. A kettő között a Visual Studio eszköztárán egy legördülővel váltasz.

💡 A .NET-ESEK „KI-BE KAPCSOLTAD?” TRÜKKJE

Ha valami nagyon összegabalyodik („márpedig ezt kijavítottam, miért a régit futtatja?!”), a bin és obj mappát nyugodtan törölheted: a következő fordítás újraépíti mindkettőt.

5SDK és runtime — fejlesztéshez több kell, mint futtatáshoz

Az A3-ból tudjuk: a C#-program futásához kell a .NET runtime (CLR + BCL). Fejlesztéshez viszont több kell — az SDK (Software Development Kit):

.NET SDK — fejlesztőknek (a te gépedre) C#-fordító (Roslyn) · dotnet parancssori eszköz · projektsablonok .NET Runtime — a futtatáshoz elég (a felhasználó gépére) CLR (JIT, GC) + BCL (Console, Math, String, …)
Az SDK a runtime-ot is tartalmazza — aki fejleszt, annak mindene megvan a futtatáshoz is.

A parancssorból bármikor megnézheted, mi van a gépen:

dotnet --list-sdks       ← telepített SDK-k
dotnet --list-runtimes   ← telepített runtime-ok

6A solution: *.sln

A Visual Studio nem projekteket, hanem solutiont (megoldást) nyit meg: ez egy gyűjtő, amelyben egy vagy több projekt él. Nálunk eleinte minden solutionben egyetlen projekt lesz — de a II. félévben jól jön majd: a kalandjáték logikája és a konzolos felülete külön projekt lehet ugyanabban a solutionben, és az L blokkban csak egy harmadik (WPF-es) projektet teszünk melléjük.

Kalandjatek.sln                 ← a solution (gyűjtő)
├─ Kalandjatek.Logika/          ← Library projekt (a játék szíve)
├─ Kalandjatek.Konzol/          ← Exe projekt (konzolos felület)
└─ Kalandjatek.Wpf/             ← WinExe projekt (év végén)

7Publish — így adod oda a programod másnak

A bin\Debug mappa nem arra való, hogy továbbadd. A kiadásra a publish (közzététel) szolgál, két üzemmódban:

MódMit kap a felhasználó?ElőnyHátrány
Keretfüggő (framework-dependent)kis méretű programpár MBa gépén ott kell lennie a .NET 10 runtime-nak
Önálló (self-contained)program + beépített runtimebárhol fut, telepítés nélkülnagyobb méret (70+ MB)

Önálló, egyetlen fájlba csomagolt program parancssorból:

dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true

Ugyanez a Visual Studióban: jobb kattintás a projekten → Publish. A Mastermind projektnél (G blokk) élesben is kipróbáljuk.

8Gyakorlat — projekt a parancssorból

ℹ️ MIELŐTT NEKIÁLLSZ

Az iskolai gépeken a .NET SDK telepítve van. Ha otthon még nincs, az A5 fejezetben a Visual Studióval együtt felkerül — akkor térj vissza ide.

  1. Nyiss parancssort: Win + RcmdEnter.
  2. Ellenőrizd az SDK-t: dotnet --list-sdks — látnod kell egy 10.x sort.
  3. Hozz létre projektet és lépj be a mappájába:
cd %USERPROFILE%\Desktop
dotnet new console -o ElsoProba
cd ElsoProba
  1. Nézd meg, mi készült: dir — ott a Program.cs és az ElsoProba.csproj. Nyisd meg Jegyzettömbben mindkettőt: notepad Program.cs, notepad ElsoProba.csproj.
  2. Fordítsd és futtasd: dotnet run — a képernyőn megjelenik: Hello, World!
  3. Nézd meg újra a mappát: dirmegjelent a bin és az obj! Keresd meg a bin\Debug\net10.0\ElsoProba.exe fájlt, és indítsd el dupla kattintással is.

9Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

A4.1

Párosítsd: Program.cs, .csproj, bin, obj — „ezt írom én”, „beállítások”, „végtermék”, „műhely”.

A4.2

Mit jelent a .csproj-ban az <OutputType>Exe</OutputType> és a <TargetFramework>net10.0</TargetFramework> sor?

A4.3⭐⭐

A gyakorlatban létrehozott ElsoProba projekt Program.cs-ében írd át a kiírt szöveget, futtasd újra (dotnet run), majd ellenőrizd: változott-e az ElsoProba.exe módosítási ideje a bin-ben? Miért?

A4.4⭐⭐

Egy játékodat el akarod küldeni egy ismerősödnek, akinek a gépén semmilyen .NET nincs. Melyik publish-módot választod és miért? Mi az ára?

A4.5⭐⭐⭐

Töröld az ElsoProba projekt bin és obj mappáját, majd futtasd újra a dotnet run-t. Mi történt? Mérd meg (nagyjából) az első és a második futtatás idejét — mire következtetsz az obj mappa szerepéről?

10Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

11Fogalomtár

FogalomJelentés
forrásfájl (.cs)a C#-kódot tartalmazó fájl — ezt írja a programozó
projektfájl (.csproj)XML-beállításfájl: megmondja a fordítónak, mit és hogyan fordítson
bina fordítás végterméke: a futtatható program és kísérői
obja fordító ideiglenes munkamappája — gyorsítja az újrafordítást
Debug / Releasefejlesztői (hibakereshető) és kiadási (optimalizált) fordítási mód
SDK (Software Development Kit)fejlesztői csomag: fordító, dotnet eszköz, sablonok + runtime
runtimea futtatáshoz szükséges réteg: CLR + BCL (A3)
solution (.sln)egy vagy több projektet összefogó gyűjtő — a Visual Studio ezt nyitja meg
publisha program kiadásra kész összecsomagolása (keretfüggő vagy önálló)
névtér (namespace)az osztályok „vezetékneve” (System.Console); a using rövidíti

12Összegzés

  1. Egy projektben négyféle szereplő van: forrásfájlok (te írod), .csproj (beállítások), bin (végtermék), obj (műhely).
  2. A bin és obj tartalma újratermelődik — nem szerkesztjük, nem tesszük Gitre, és baj esetén nyugodtan törölhető.
  3. A .csproj kulcsai közül a legfontosabbak: OutputType (mi készül), TargetFramework (melyik .NET-re), ImplicitUsings és Nullable.
  4. SDK = fejlesztéshez (fordító + eszközök), runtime = futtatáshoz (CLR + BCL); az SDK a runtime-ot is tartalmazza.
  5. A solution (.sln) projekteket fog össze — a Visual Studio mindig ezt nyitja.
  6. A programot a publish teszi átadhatóvá: keretfüggőn (kicsi, de runtime kell) vagy önállóan (nagy, de bárhol fut).