A .NET Framework sok egyéb mellett rendelkezik egy parancssori fordító segédprogrammal,
melynek neve CSC.EXE. Számtalan parancssori opcióval rendelkezik annak érdekében,
hogy a fordítás igazán testre szabható legyen.
A parancssori fordítóval (CSharp Compiler) tehát tetszőleges forrásállomány(ok)ból
generálható futtatható alkalmazás, vagy dinamikus könyvtár (DLL). A parancssori
fordító alapértelmezésben a Windows mappájában található, a következő elérési útvonalon:
<winroot>:\\Windows\Microsoft.NET\Framework\<.NET Framework verziószámától
függő mappanév>\csc.exe. A Visual Studio.NET Command Promptját elindítva bárhonnan
elérhető.
Vizsgáljuk meg a parancssori opciókat sorban:
/?
Megjeleníti a parancssori opciókat, melyeket használhatunk.
/addmodule: modul neve
Megadható egy metaadatokat tartalmazó állomány neve, mely nem tartalmaz assembly
manifeszt-et. Több állomány esetén azok nevét pontosvesszővel kell elválasztani
egymástól.
A megadandó állományoknak a kimenettel azonos mappában kell lenniük futáskor, fordítási
időben természetesen tetszőleges elérési útvonalak specifikálhatóak. Ellenkező esetben
egy System.TypeLoadException típusú kivétel generálódik.
Ha egy forrásállomány a /target: module opcióval van lefordítva, akkor a kimenet
beszerkeszthető a kódba az /addmodule opcióval.
/baseaddress: cím
Megadható a DLL kezdőcíme hexadecimális, oktális, vagy decimális formátumban. Az
alapértelmezett megoldás, hogy a CLR ad kezdőcímet a DLL-nek. Ha a kimenet nem DLL,
akkor ez az opció figyelmen kívül marad.
/bugreport: fájl neve
Fordításkor egy állományba kerül a lista az esetleges hibákról. A hibaállomány a
következőket tartalmazza: fordítási opciók, forráskódok, verzióinformációk (operációs
rendszer, CLR, és fordító adatai), generált kimenet, hibajegyzés, és javaslat a
megoldásról. Egy példa erre:
csc /bugreport:problem.txt t2.cs
/codepage: azonosító
Megadható a fordításkor alkalmazandó kódlap azonosítója.
/debug [+/-]
A fordításkor DEBUG információk is keletkeznek egy állományban, ez a keretrendszer
DEBUG módú fordításával azonos funkció. Egy példa a használatára:
csc /debug /out:app.exe test.cs
/define: definíció neve
Megadható, hogy milyen szimbólumokat szeretnénk definiálni a fordításkor. Egyenértékű
azzal, ha egy #define preprocesszor direktívát használunk a forrásban. Használható
definíciók: #if, #elif, #else és #endif, melyekkel testre szabható a fordítás. Több
szimbólum definíciója esetén azok nevét pontosvesszővel választjuk el. Egy kódrészlet,
mely szemlélteti a leírtakat:
#define xx
using System;
public class Test
{
public static void Main()
{
#if (xx)
Console.WriteLine("xx exists");
#else
Console.WriteLine("xx does not exist");
#endif
}
}
/doc: fájlnév
A forráskód kiegészítéseit helyezhetjük el egy XML állományban. A definíciók, melyeket
megelőz a „///” karakterliterál, bekerülnek az állományba. A forrás, mely a Main
függvényt tartalmazza, elsőként kerül be az állományba.
/incremental [+/-]
A fordítási opció használatával engedélyezhetjük vagy tilthatjuk a fordító számára
a fordítás azon típusát, melyben csak a megváltozott alkotókat építi újra. Ekkor
a következő állományokban tárolódnak a fordítás előző végrehajtásával összefüggő
adatok:
- kimenet_neve.dbg: /debug opció használatakor a DEBUG státusz információi a program
adatbázisban tárolódnak (.pdb).
- kimenet_neve.kiterjesztése.incr: a fordítási információk, melyek eltérnek a DEBUG
információktól, egy .incr állományban tárolódnak.
Amikor első alkalommal használjuk az /incremental opciót, akkor generálódnak a fenti
állományok, majd az opciók megváltoztatása eredményez egy teljes újrafordítást.
Ha a fordító sok változást észlel az utolsó fordítás óta, vagy nem találja a fenti
állományokat, akkor is egy újrafordítás következik be.
Az /incremental opcióval fordított kimenet állományai nagyobb méretűek.
/lib: könyvtár
A /reference opcióban megadott hivatkozott assembly-k könyvtárát lehet itt megadni,
amennyiben azok nincsenek a kimenet mappájában, vagy a CLR rendszermappájában. A
fordító a következő sorrendben keresi a hivatkozott assembly-ket:
- fordító mappája
- CLR rendszermappája
- /lib opcióval megadott mappa
- LIB környezeti változóban megadott mappa
Használatára a következő példát említhetnénk:
csc /lib:c:\ /reference:t2.dll t2.cs
/linkresource: fájlnév
Megadható egy erőforrás-állomány, mely a fordítandó kódhoz szerkesztendő. Az erőforrás-állomány
nincs a kimenet mappájában. Az opció használatához a generált kimenet .EXE, vagy
.DLL állomány kell, hogy legyen. Ha olyan erőforrásról van szó, mely a fejlesztőkörnyezetben
generálódott, vagy a RESGEN.EXE segédprogrammal jött létre, akkor azt a System.Resources
névtér elemeivel lehet elérni. Minden egyéb eredetű erőforrás-állományt a System.Reflection.Assembly
osztály metódusaival tudunk elérni futási időben.
Ha adott egy .RESOURCE állomány, akkor a következőképpen használhatjuk fel a fordításkor:
csc /linkresource:rf.resource in.cs
/main: osztály neve
Megadható, hogy a Main függvény deklarációja mely osztályban található. Ha több
olyan állományt fordítunk, mely tartalmaz Main deklarációt, meg kell adnunk, hogy
melyik legyen a kezdőpont. Csak .EXE állomány generálásakor használható. Például:
csc t2.cs t3.cs /main:Test2
/nostdlib[+/-]
Megadható, hogy a mscorlib.dll ne importálódjon a fordításkor. A típus a System
névtérben található. Akkor alkalmazzuk, ha saját System névteret akarunk létrehozni.
/nowarn: figyelmeztetés száma
A fordító számára jelezhetjük, hogy mely azonosítóval rendelkező figyelmeztetés
ne jelenjen meg a képernyőn. Ha például a CS0028 figyelmeztetést nem kívánjuk megjeleníteni,
akkor a következőképpen kell használnunk az opciót:
/optimize [+/-]
A generált kimenet optimalizálható sebességre, hatékonyságra és méretre. Ezek arányai
szabhatók meg az opció használatával. Arra figyelni kell, hogy a hivatkozott assembly-k
azonos módon legyenek optimalizálva. Használata egyszerű:
/out : fájlnév
A kimenet neve adható meg az opcióval. Ha nem adunk meg /out opciót, akkor .EXE
esetén a Main definíciót tartalmazó modul neve lesz a generált állomány neve, .DLL,
vagy .NETMODULE esetén az első forrásállomány neve.
Fordításkor több generált kimenet is specifikálható. Ekkor a források neveit az
/out opció után kell feltüntetni, mindegyiket elkülönítve. A következő példában
két forrásállományt használunk, és mindkettőt külön állományba szeretnénk fordítani.
Ekkor az alábbi a teendőnk:
csc t2.cs /out:t3.exe t3.cs
/recurse: könyvtárnév\fájlnév
Az opciót több forrásállománnyal rendelkező projekt esetén alkalmazhatjuk, mert
megadható, hogy egy mappa összes almappájában található állomány fordításra kerüljön.
Ha például a projekt mappájában található összes .CS állományát le kívánjuk fordítani,
a következőt kell megadnunk:
Ha viszont a források egy alternatív mappában tárolódnak, akkor van szükségünk a
/recurse opcióra.
csc /target:library /out:dir2.dll /recurse: dir1\dir2\*.cs
/reference: fájlnév
Megadható azoknak a hivatkozott assembly-knek a listája, melyeket be kell szerkesztenünk
a kódba. Előfordulhat olyan eset is, hogy hivatkozunk egy assembly-re (A), mely
további assembly-kre (B) hivatkozik. Ekkor a további assembly-ket csak a következő
esetekben kell felsorolnunk:
- Ha az általunk hivatkozott assembly-ben (A) megtalálható típus a B assembly-ben
megtalálható típusból származik,
- Ha az A-ban meghívott metódus visszatérési értékének típusa a B assembly-ben van
definiálva.
Példaként a következő parancssort említhetnénk:
Csc /reference:System.dll test.cs
/resource: állománynév
A megadott erőforrás állomány a generált kódba szerkesztődik be, így az erőforrást
nem kell mozgatnunk a futtatható állománnyal együtt, ha azt egy másik gépre telepítjük.
Használata igen egyszerű:
csc /resource:rf.resource in.cs
/target: kulcsszó
Megadható, hogy a fordítás milyen típusú kimenetet generáljon. A lehetséges típusok
(kulcsszó értékek) a következők:
- exe: Ekkor futtatható .EXE állomány generálódik,
- library: .DLL állomány generálódik,
- module: Modul generálódik,
- winexe: Windows-os .EXE generálódik.
Az assembly manifeszt – melyből csak egy generálódik fordításonként – az első generált
.EXE állományban található, vagy az első .DLL-ben, ha nincs .EXE állomány. Minden
forrásfájlokkal kapcsolatos információ a manifeszt-ben tárolódik.
/unsafe
Jelezhetjük a fordító számára, hogy a forrás UNSAFE kulcsszót használ. Használata:
/warn: szint
Beállítható a figyelmeztetési szint, melynek megfelelően üzenetek jelennek meg a
fordítással kapcsolatban. A skála 0 és 4 közötti értékeket tartalmaz, ahol a 0 szint
esetén nem jelenik meg semmilyen üzenet. Használata:
/warnaserror [+/-]
Specifikálható, hogy valamennyi WARNING figyelmeztetés ERROR-ként jelenjen meg,
vagyis eredményezze a fordítási folyamat leállását, és akadályozza meg kimenet generálását.
Használata:
/win32icon: fájlnév
Megadható egy, a forrásba beszerkesztendő ikon állomány elérési útvonala. Ekkor
az alkalmazás neve mellett ez az ikon jelenik meg a fájlkezelő alkalmazásokban.
Használata:
csc /win32icon:rf.ico in.cs
/win32res: fájlnév
Megadható egy, a forrásba beszerkesztendő erőforrás-állomány elérési útvonala. Szintén
az alkalmazás neve mellett megjelenő kép szerkesztődik be ily módon. Az állomány
.RES kiterjesztésű. Használata:
csc /win32res:rf.res in.cs