Platforma .NET framework je, jak jist∞ vφte, nadstavba operaΦnφho systΘmu Windows, kterß se mß v budoucnu stßt jeho nedφlnou souΦßstφ. Programovßnφ pro toto prost°edφ mß °adu zajφmav²ch rys∙, s nimi₧ jsme se p°i programovßnφ pro Win32 nesetkali. V tomto Φlßnku se na n∞ podφvßme blφ₧e.
ZejmΘna se podrobn∞ zastavφme u pojmu sestavenφ (assembly) a ukß₧eme si, jakΘ mßme p°i jeho vytvß°enφ a pou₧φvßnφ mo₧nost.
P°φklady budou vychßzet z jazyka C#, kter² se pro ·Φely progrmovßnφ pro .NET hodφ asi nejlΘpe û koneckonc∙ byl navr₧en a implementovßn stejn²m t²mem jako prost°edφ .NET. Budeme pou₧φvat prakticky v²hradn∞ p°ekladaΦ csc.exe spouÜt∞n² z p°φkazovΘ °ßdky, nebo¥ ten poskytuje zdaleka nejvφce mo₧nostφ.
Na zaΦßtek si zopakujeme zßkladnφ fakta o platform∞.NET Framework. Jejφ oficißlnφ schΘma, jak ho publikovala firma Microsoft, ukazuje nßsledujφcφ obrßzek 1.
Struktura platformy .NET Framework
Programy, napsanΘ. pro platformu NET Framework v jakΘmkoli programovacφm jazyce, se p°eklßdajφ do mezijazyka IL (Intermediate Language) a p°ed spuÜt∞nφm se z IL p°eklßdajφ do strojovΘho k≤du p°ekladaΦem JIT (Just In Time). Na IL se m∙₧eme dφvat jako na typick² bajtov² k≤d, tedy jazyk jakΘhosi virtußlnφho procesoru. V tomto p°φpad∞ se ovÜem neinterpretuje, jak tomu je nap°. u Javy, ale p°eklßdß p°ed spuÜt∞nφm do nativnφho k≤du. (Ostatn∞ tento postup, oznaΦovan² jako technologie HotSpot, se dnes pou₧φvß i v Jav∞.)
Jßdrem platformy .NET Framework je spoleΦnΘ b∞hovΘ prost°edφ, anglicky oznaΦovanΘ Common Language Runtime (CLR). CLR zajiÜ¥uje b∞h program∙ p°elo₧en²ch z r∙zn²ch programovacφch jazyk∙ do mezijazyka IL. CLR umo₧≥uje jejich vzßjemnou spoluprßci, tak₧e r∙znΘ souΦßsti programu mohou b²t napsßny v r∙zn²ch programovacφch jazycφch. Starß se mj. o automatickou sprßvu pam∞ti, o °φzenφ doby ₧ivota objekt∙ a o dalÜφ v∞ci nezbytnΘ pro sprßvn² b∞h program∙ v tomto prost°edφ.
Podrobn∞ji ukazuje strukturu CLR obrßzek 2, kter² op∞t pochßzφ z oficißlnφ dokumenatce.
Struktura spoleΦnΘho b∞hovΘho systΘmu (CLR)
SouΦßstφ CLR je i spoleΦn² typov² systΘm (Common Type System, CTS). To je v podstat∞ specifikace po₧adavk∙, kter²m musφ vyhovovat datovΘ typy, aby je mohl systΘm CLR zp°φstupnit program∙m napsan²m v jin²ch programovacφch jazycφch.
P°ekladaΦ jazyka C# (nebo jinΘho jazyka pro .NET Framework) vytvß°φ tzv. °φzen² k≤d (managed code; n∞kdy se takΘ hovo°φ o zabezpeΦenΘm k≤du , safe code). To je k≤d, kter² b∞₧φ pod dozorem CLR a vyu₧φvß jeho slu₧eb û automatickΘ sprßvy pam∞ti, nßstroj∙ pro prßci s v²jimkami atd., metadat a nßstroj∙ pro p°φstup k nim atd.
D∙le₧itou souΦßstφ prost°edφ .NET Framework je knihovna, naz²vanß souhrnn∞ Zßkladnφ knihovna t°φd (Base Class Library, BCL). Pokr²vß tΘm∞° vÜe, naΦ si lze vzpomenout û od vstupnφch a v²stupnφch operacφ po kontejnery (t°φdy slou₧φcφ pro uklßdßnφ r∙zn²ch druh∙ dat), nßstroje pro prßci se sφtφ, nßstroje pro zabezpeΦenφ atd. To znamenß, ₧e programovacφ jazyky pro prost°edφ .NET nepot°ebuje svΘ vlastnφ knihovny.
Nad knihovnou BCL jsou jeÜt∞ knihovny pro programovßnφ grafickΘho u₧ivatelskΘho rozhranφ program∙ a knihovny pro webovΘ slu₧by.
NejvyÜÜφ vrstvu prost°edφ .NET Framework tvo°φ p°ekladaΦe z r∙zn²ch programovacφch jazyk∙.
Prost°edφ .NET Framework podporuje prßci s tzv. metadaty . To jsou dodateΦnΘ informace, kterΘ se uklßdajφ do IL v dob∞ p°ekladu a kterΘ umo₧≥ujφ zφskßvat z p°elo₧enΘho programu velmi podrobnΘ informace o t°φdßch, kterΘ tento program obsahuje, o jejich metodßch atd. Tomuto mechanizmu se °φkß reflexe. (Na metadata se m∙₧eme dφvat jako na alternativy k tzv. typov²m knihovnßm ( type library ), s nimi₧ jsme se setkßvali p°i programovßnφ komponent COM.)
Prost°edφ .NET Framework ovÜem umo₧≥uje spolupracovat i s tzv. ne°φzen²m k≤dem (unmanaged code). To je k≤d, kter² neb∞₧φ v rßmci CLR; jde o klasick² k≤d pro Win32. Ne°φzen² k≤d lze psßt i v C#, i kdy₧ to nenφ standardnφ postup. (Ne°φzenΘ ovÜem mohou b²t v C# pouze jednotlivΘ metody, nikoli cel² program.)
SouΦßstφ prost°edφ .NET Framework jsou takΘ mechanizmy, kterΘ se starajφ o zabezpeΦenφ distribuovan²ch aplikacφ.
P°ekladaΦ jazyka C# a vÜechny zßkladnφ nßstroje pot°ebnΘ pro v²voj aplikacφ pro .NET Framework, tj. . NET Framework SDK Version 1.1 , lze zφskat zdarma, a to na webov²ch strßnkßch firmy Microsoft na http://www.microsoft.com/downloads . P°ed instalacφ je ovÜem t°eba stßhnout a instalovat tzv. . NET Framework Redistributable Package version 1.1 . Tento balφk musφ b²t instalovßn na ka₧dΘm poΦφtaΦi, na n∞m₧ majφ b∞₧et aplikace pro .NET Framework.
Tento p°ekladaΦ vyu₧φvajφ i v²vojovΘ nßstroje t°etφch firem (nap°. Borland C#Builder).
Knihovny platformy.NET jsou hierarchicky uspo°ßdßny do tzv. prostor∙ jmen. JmΘno t°φdy z knihovny je p°i pou₧itφ t°eba kvalifikovat jmΘnem prostoru jmen. K tomu se v C# pou₧φvß operßtor ä . ô (teΦka). Zßkladnφ prostor jmen se jmenuje System , vÜechny ostatnφ standardnφ prostory jmen jsou do n∞j vno°eny.
Prostory jmen lze samoz°ejm∞ definovat i v naÜich vlastnφch programech.
Jazyk IL, do n∞ho₧ se vÜechny programy pro .NET p°eklßdajφ, je Φist∞ objektov². Tomu odpovφdß i typov² systΘm tohoto jazyka (a odrß₧φ se to i ve vyÜÜφch programovacφch jazykφch, kterΘ se pro vytvß°enφ program∙ pro .NET pou₧φvajφ).
V prost°edφ .NET û tedy v IL û se rozliÜujφ dv∞ zßkladnφ skupiny datov²ch typ∙: Do prvnφ pat°φ tzv. hodnotovΘ typy, co₧ jsou nap°. Φφsla, znaky, logickΘ hodnoty, v²ΦtovΘ typy nebo struktury, a do druhΘ pat°φ tzv. referenΦnφ typy û to jsou t°φdy, rozhranφ, pole a delegßty.
Instance t°φd a ostatnφch referenΦnφch typ∙ lze vytvß°et pouze dynamicky a o jejich ruÜenφ se starß garbage collector. Pracujeme s nimi pomocφ referencφ.
Prom∞nnΘ hodnotov²ch typ∙ mohou b²t pouze slo₧kami t°φd (pak se vytvß°ejφ v rßmci t∞chto instancφ dynamicky) nebo lokßlnφmi prom∞nn²mi v metodßch (a v tomto p°φpad∞ se vytvß°ejφ na zßsobnφku, jak se na lokßlnφ prom∞nnΘ sluÜφ).
Mezi hodnotov²mi typy se jeÜt∞ vyΦle≥uje skupina tzv. atomick²ch (primitivnφch) typ∙. To jsou celß Φφsla (v C# jde o typy typy sbyte , short , int , long , byte , ushort , uint , ulong ), znaky (typ char ), reßlnß Φφsla (typy float a double ) a logickΘ hodnoty (typ bool ).
DatovΘ typy, kterΘ se v C#, J# a dalÜφch jazycφch jevφ jako atomickΘ (Φφsla, znaky atd.), jsou ve skuteΦnosti v IL definovßny jako struktury (tj. t°φdy, od nich₧ nelze odvozovat potomky a kterΘ se chovajφ jako hodnotovΘ typy). V d∙sledku toho m∙₧eme i pro instance hodnotov²ch typ∙ volat odpovφdajφcφ metody. Je-li nap°. v C# prom∞nnß i typu int , m∙₧eme bez problΘm∙ napsat
string s = i.ToString();
a p°ekladaΦ zavolß odpovφdajφcφ metodu t°φdy string .
Poznamenejme, ₧e ve v∞tÜin∞ programovacφch jazyk∙ v prost°edφ .NET m∙₧eme pou₧φvat bu∩ obvyklΘ oznaΦenφ atomick²ch typ∙, nap°. int , nebo alternativnφ oznaΦenφ, je₧ se odvolßvß na odpovφdajφcφ t°φdu û nap°. System.Int32 .
SpoleΦn²m p°edkem vÜech datov²ch typ∙ v IL je t°φda System.Object , v C# dostupnß takΘ pomocφ klφΦovΘho slova object .
U₧ jsme si °ekli, ₧e vÜechny t°φdy v IL tvo°φ jednu hierarchii, tj. jsou odvozeny od spoleΦnΘho p°edka û t°φdy System.Object . V tΘto hierarchii le₧φ nejen p°eddefinovanΘ t°φdy, ale i t°φdy, kterΘ ve svΘm programu definujeme my. Jestli₧e v deklaraci novΘ t°φdy neuvedeme p°edka, doplnφ si p°ekladaΦ jako p°edka t°φdu System.Object . To znamenß, ₧e vÜechny t°φdy obsahujφ urΦitΘ zßkladnφ metody, a tedy u vÜech instancφ vÜech t°φd lze oΦekßvat jistΘ zßkladnφ spoleΦnΘ chovßnφ. Tyto metody lze v odvozen²ch t°φdßch samoz°ejm∞ p°edefinovat.
TakΘ hodnotovΘ typy jsou odvozeny od t°φdy System.Object , tak₧e pro jejich prom∞nnΘ m∙₧eme volat metody zd∞d∞nΘ od t°φdy System.Object . HodnotovΘ typy ovÜem nepodporujφ d∞d∞nφ (°eΦeno terminologiφ platformy .NRT jsou zapeΦet∞nΘ ).
Poznamenejme, ₧e prost°edφ .NET Framework podporuje pouze jednoduchou d∞diΦnost. T°φda m∙₧e mφt jen jednoho p°edka, m∙₧e ale implementovat libovoln² poΦet rozhranφ.
SouΦßstφ platformy .NET je specifikace spoleΦnΘho typovΘho systΘmu (Common Type Specification û CTS). Je to specifikace po₧adavk∙, kterΘ musφ spl≥ovat datovΘ typy, pokud majφ b²t pou₧itelnΘ v prost°edφ platformy .NET Framework. Nap°.:
T°φdy sm∞jφ mφt jedinΘho p°edka,
struktury nesm∞jφ mφt konstruktor bez parametr∙,
struktury musejφ b²t odvozeny od typu System.ValueType ,
v²ΦtovΘ typy musejφ b²t odvozeny od typu System.Enum .
Vedle spoleΦnΘho typovΘho systΘmu, kter² urΦuje vlastnosti vÜech datov²ch typ∙, kterΘ lze pou₧φvat v prost°edφ .NET, je t°eba v∞d∞t i o tzv. specifikaci spoleΦnΘho jazyka (Common Language Specification û CLS). Ta vyjad°uje n∞co jako pr∙nik û spoleΦnΘ minimum û, kterΘ obsahujφ vÜechny programovacφ jazyky pro .NET, i kdy₧ je mohou vyjad°ovat r∙zn²mi zp∙soby.
Smyslem tΘto specifikace je definovat pravidla, kterß zajistφ, ₧e t°φdu napsanou v jednom programovacφm jazyce pro .NET budeme moci pou₧φt v kterΘmkoli jinΘm jazyce pro tuto platformu. P°itom pou₧itφm zde rozumφme nejen vytvß°enφ instancφ a volßnφ metod, ale i odvozovßnφ potomk∙ atd.
Pravidla CLS se vztahujφ pouze na souΦßsti typ∙, kterΘ lze pou₧φvat mimo seskupenφ, v n∞m₧ je tento typ definovßn. To znamenß, ₧e se nevztahujφ na soukromΘ (private) souΦßsti. (Lze jφzliv∞ poznamenat, ₧e hlavnφm smyslem CLS je udr₧et ve h°e Visual Basic.)
Nßsledujφcφ tabulka obsahuje p°ehled zßkladnφch datov²ch typ∙ pou₧φvan²ch v prost°edφ .NET a jejich reprezentacφ v nejpou₧φvan∞jÜφch jazycφch pro platformu .NET.
.NET |
C# |
C++ |
VB .NET |
Je v CLS? |
System.Byte |
byte |
char |
Byte |
Ano |
System.SByte |
sbyte |
signed char |
ù |
Ne |
System.Int16 |
short |
short |
Short |
Ano |
System.Int32 |
int |
int |
Integer |
Ano |
System.Int64 |
long |
__int64 |
Long |
Ano |
System.UInt16 |
ushort |
unsigned short |
ù |
Ne |
System.UInt32 |
uint |
unsigned int |
ù |
Ne |
System.UInt64 |
ulong |
unsigned __int64 |
ù |
Ne |
System.Single |
float |
float |
Single |
Ano |
System.Double |
double |
double |
Double |
Ano |
System.Object |
object |
Object* |
Object |
Ano |
System.Char |
char |
__wchar_t |
Char |
Ano |
System.String |
String |
String* |
String |
Ano |
System.Decimal |
decimal |
Decimal |
Decimal |
Ano |
System.Boolean |
bool |
bool |
Boolean |
Ano |
K tomu je t°eba doplnit, ₧e ve sloupci C++ je uvedena reprezentace odpovφdajφcφho datovΘho typu ve Visual C++ .NET se °φzen²mi rozÜφ°enφmi (managed extensions). To znamenß, ₧e nemusφ odpovφdat standardnφm typ∙m v C++ podle ISO 14882.
VÜimn∞te si, ₧e n∞kterΘ typy nelze pou₧φvat ve Visual Basicu.
P°eklad zdrojovΘho k≤du vytvo°φ tzv. assembly (seskupenφ, sestavenφ, komplet û se vÜemi t∞mito termφny se lze v ΦeskΘ literatu°e o prost°edφ .NET setkat). To je spustiteln² soubor, dynamickß knihovna apod. pro platformu .NET. Obsahuje IL ve formßtu PE (Portable Executable). Tento soubor PE obsahuje krom∞ zavad∞Φe (nativnφho k≤du, kter² obstarß spuÜt∞nφ), k≤du v IL a prost°edk∙ (resource) takΘ tzv. manifest, soubor s dodateΦn²mi informacemi o datov²ch typech v tomto seskupenφ.
Seskupenφ jsou zßkladem program∙ pro platformu .NET. Jejich nejd∙le₧it∞jÜφ funkce lze shrnout do nßsledujφcφho p°ehledu:
Seskupenφ pochopiteln∞ obsahuje k≤d, kter² bude CLR provßd∞t. Aby ho bylo mo₧no spustit, musφ b²t k n∞mu p°idru₧en manifest. Poznamenejme, ₧e seskupenφ m∙₧e mφt jen jeden vstupnφ bod p°edstavovan² typicky metodou Main() , DllMain() ,nebo WinMain() . (Nezapomφnejme, ₧e IL je Φist∞ objektov² jazyk û musφ to b²t statickß metoda.)
Seskupenφ tvo°φ jednotku zabezpeΦenφ. R∙znß p°φstupovß oprßvn∞nφ jsou ud∞lovßna a vy₧adovßna prßv∞ na ·rovni seskupenφ.
Seskupenφ p°edstavujφ jednotku z hlediska prßce s datov²mi typy. SouΦßstφ identifikace typu je i jmΘno seskupenφ, v n∞m₧ je dan² typ ulo₧en.
Seskupenφ p°edstavuje jednotku z hlediska vyhledßvßnφ jmen. To je zalo₧eno na metadatech ulo₧en²ch v manifestu. Manifest obsahuje metadata seskupenφ, kterß slou₧φ pro vyhledßvßnφ, objevφ-li se v programu po₧adavky na prost°edky. Manifest specifikuje, jakΘ prost°edky seskupenφ dßvß k dispozici. Manifest takΘ obsahuje informace o ostatnφch seskupenφch, na nich₧ toto seskupenφ zßvisφ.
Seskupenφ p°edstavuje jednotku z hlediska sprßvy verzφ. Je to nejmenÜφ Φßst programu v CLR, kterß m∙₧e mφt samostatnΘ Φφslo verze. V manifestu mohou b²t specifikovßny po₧adavky na verze seskupenφ, na nich₧ toto seskupenφ zßvisφ.
Seskupenφ p°edstavuje jednotku z hlediska nasazenφ programu. P°i startu programu musφ b²t k dispozici pouze ta seskupenφ, kterß aplikace na poΦßtku pou₧φvß. Ostatnφ mohou b²t zavedena do pam∞ti a₧ na vy₧ßdßnφ.
Seskupenφ mohou b²t statickß nebo dynamickß.
Statickß obsahujφ t°φdy a rozhranφ, ale takΘ prost°edky (bitovΘ mapy atd.). Jsou ulo₧ena na disku v souborech PE.
Dynamickß seskupenφ se vytvß°ejφ v pam∞ti za b∞hu programu a p°φmo z nφ se spouÜt∞jφ, neuklßdajφ se p°ed spuÜt∞nφm na disk.
Pro vytvo°enφ seskupenφ lze pou₧φt v²vojovΘ nßstroje (p°ekladaΦ), lze ale takΘ vyu₧φt nßstroje z CLR API, kterΘ jsou nap°. v prostoru jmen Reflection.Emit .
Vedle toho se rozliÜujφ soukromß a sdφlenß seskupenφ.
SoukromΘ seskupenφ je souΦßstφ pouze jednΘ aplikace. Typicky je instalovßno v domovskΘm adresß°i aplikace. Nepou₧φvß Φφslo verze, nestarß se o zabezpeΦenφ.
SdφlenΘ seskupenφ slou₧φ vφce aplikacφm. Instaluje se v globßlnφ pam∞ti seskupenφ (global assembly cache, GAC) pomocφ programu gacutil.exe nebo pomocφ Windows Exploreru. Pou₧φvß Φφslo verze a musφ b²t digitßln∞ podepsßno. Pot°ebnΘ nßstroje jsou souΦßstφ instalace SDK pro .NET.
Logickou strukturu seskupenφ ukazuje obrßzek 3.
Logickß struktura seskupenφ (assembly)
╪φzenφ p°φstupu ke slo₧kßm v .NET (p°φstupovß prßva)
Platforma .NET podporuje 6 ·rovnφ p°φstupu ke slo₧kßm datov²ch typ∙; programovacφ jazyky je ale nemusφ vyu₧φt vÜechny. V nßsledujφcφm p°ehledu si uvedeme jejich nßzvy v prost°edφ .NET (tj. v CLR), v C# a ve VB.
Private (private, Private)
P°φstup je dovolen pouze metodßm typu, jeho₧ je danß slo₧ka souΦßstφ.Family (protected, Protected)
P°φstup je dovolen pouze metodßm definujφcφho typu nebo typ∙ od n∞j odvozen²ch (potomk∙), a to bez ohledu na seskupenφ, v n∞m₧ se nachßzejφ.Family & assembly (C# ani VB nepodporuje)
P°φstup je dovolen pouze metodßm definujφcφho typu nebo typ∙ od n∞j odvozen²ch (potomk∙), avÜak pouze v seskupenφ, v n∞m₧ se definujφcφ typ nachßzφ.Assembly (internal, Friend)
P°φstup je dovolen pouze metodßm typ∙ definovan²ch v seskupenφ, v n∞m₧ se definujφcφ typ nachßzφ.Assenbly or family (protected internal, Protected Friend)
P°φstup je dovolen metodßm definujφcφho typu nebo typ∙ od n∞j odvozen²ch (potomk∙), a to bez ohledu na seskupenφ, v n∞m₧ se nachßzejφ, a takΘ metodßm typ∙ definovan²ch v tΘm₧e seskupenφ bez ohledu na d∞dickou hierarchii.Public (public, Public)
P°φstup ke dovolen vÜem metodßm vÜech typ∙ ve vÜech seskupenφch.
Nynφ se krßtce zastavφme u nßstroj∙ pro v²voj program∙, kterΘ platforma .NET dßvß v²vojß°∙m k dispozici a kterΘ budeme v dalÜφm povφdßnφ pot°ebovat. Bezpochyby nejd∙le₧it∞jÜφm z nich je p°ekladaΦ csc.exe , kter² najdeme v adresß°i s instalacφ prost°edφ .NET Framework; na mΘm poΦφtaΦi to je C:\Winnt\Microsoft.NET\Framework\v1.1.4322 . Jeho zßkladnφ pou₧itφ je
csc jmΘno_souboru
Tφmto p°φkazem p°elo₧φme zdrojov² soubor jmΘno_souboru . Pokud nep°ikß₧eme n∞co jinΘho, zavolß p°ekladaΦ i sestavovacφ program a vytvo°φ spustiteln² soubor s p°φponou .exe . Poznamenejme, ₧e jmΘno souboru musφ obsahovat p°φponu .cs . P°ed jmΘno souboru (resp. jmΘna soubor∙) lze uvΘst °adu p°epφnaΦ∙, kterΘ shrnuje nßsledujφcφ tabulka. S pou₧itφm n∞kter²ch z nich se seznßmφme v p°φÜtφm dφlu tohoto Φlßnku.
/out : jmΘno_souboru |
UrΦuje jmΘno v²stupnφho souboru. |
/target:exe |
Tato volba je implicitnφ. Vytvo°φ spustiteln² |
/target:winexe |
Vytvo°φ spustiteln² soubor pro okennφ aplikaci. |
/target:library |
Vytvo°φ dynamickou knihovnu pro prost°edφ .NET Framework. |
/target:module |
Vytvo°φ modul, kter² lze p°ipojit k jinΘmu |
/define: seznam_symbol∙ |
Definuje v p°eklßdan²ch zdrojov²ch souborech podmφn∞nΘ symboly. V seznamu se odd∞lujφ |
/doc: soubor |
JmΘno XML souboru, do kterΘho se ulo₧φ |
/recurse: ₧olφk |
Pou₧ije vÜechny soubory v aktußlnφm adresß°i a vÜechny podadresß°e specifikovanΘ ₧olφkem. |
/reference: sezn _ soubor∙ |
Odkaz na metadata specifikovan²ch seskupenφ. |
/addmodule: sezn _ soubor∙ |
P°ipoj k tomuto seskupenφ specifikovanΘ soubory. |
/win32res: soubor |
Specifikuje soubor .res s prost°edky pro Win32. |
/win32icon: soubor |
Pou₧ije pro v²stup uvedenou ikonu. |
/resource: resinfo |
Vlo₧φ specifikovanΘ prost°edky. |
/linkresource: resinfo |
P°ipojφ specifikovanΘ prost°edky do tohoto |
/debug[+|-] |
P°elo₧en² program bude obsahovat ladicφ |
/debug:{full|pdbonly} |
Specifikuje zp∙sob lad∞nφ. Volba full je implicitnφ a dßvß mo₧nost p°ipojenφ ladicφho nßstroje k b∞₧φcφmu programu. |
/optimize[+|-] |
Povoluje nebo zakazuje optimalizace. |
/incremental[+|-] |
Povoluje p°φr∙stkovou kompilaci. |
/warnaserror[+|-] |
Varovßnφ se poklßdajφ za chyby. |
/warn: Φφslo |
Nastavuje ·rove≥ varovßnφ ( Φφslo je v rozmezφ |
/nowarn: sez_varovßnφ |
Zakß₧e uvedenß varovßnφ. |
/checked[+|-] |
Nastavφ nebo zakß₧e kontrolu celoΦφselnΘho |
/unsafe[+|-] |
Nastavφ nebo zakß₧e nezabezpeΦen² k≤d. |
@ soubor |
Odkaz na soubor s dalÜφmi volbami (response file). |
/help /? |
VypφÜe nßpov∞du. |
/nologo |
PotlaΦφ hlßÜenφ p°ekladaΦe o autorsk²ch prßvech. |
/noconfig |
Zakazuje automatickΘ pou₧itφ souboru CSC.RSP |
/baseaddress: adresa |
Bßzovß adresa vytvß°enΘ knihovny. |
/bugreport: soubor |
Vytvo°φ soubor s chybov²mi hlßÜenφmi. |
/codepage: n |
Specifikuje k≤dovou strßnku, kterß se pou₧ije p°i Φtenφ zdrojov²ch soubor∙. |
/utf8output |
V²stup p°ekladaΦe v k≤dovßnφ UTF-8. |
/main: typ |
Specifikuje t°φdu, kterß obsahuje metodu Main() , od nφ₧ mß program zaΦφt. (P°ikazuje ignorovat jinΘ mo₧nΘ vstupnφ body programu.) |
/fullpaths |
P°ekladaΦ generuje pln∞ kvalifikovanΘ cesty. |
/filealign: n |
UrΦuje zarovnßnφ pou₧itΘ ve v²stupnφm souboru. |
/nostdlib[+|-] |
Zakazuje automaticky pou₧φt odkaz na standardnφ knihovnu mscorlib.dll |
/lib: seznam_soubor∙ |
Zadßvß dodateΦnΘ adresß°e, v nich₧ se budou |
Poznamenejme, ₧e tento p°ekladaΦ existuje v °ad∞ lokalizovan²ch verzφ, mezi jin²m i v ΦeskΘ verzi. (To znamenß, ₧e vypisyje ΦeskΘ chybovΘ zprßvy).
Pokud neuvedeme nic jinΘho, instalujφ se tyto nßstroje do stejnΘho adresß°e jako p°ekladaΦ csc.exe .
Al.exe
Linker, kter² vytvo°φ seskupenφ ze zadan²ch modul∙ a soubor∙ s prost°edky (resources).CorDbg.exe
Nßstroj pro lad∞nφ program∙ v MSIL z p°φkazovΘ °ßdky. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework; na mΘm poΦφtaΦi to je C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\bin .Gacutil.exe
Slou₧φ k instalaci a odinstalovßnφ sdφlen²ch seskupenφ. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Ilasm.exe
P°ekladaΦ jazyka IL. (Vytvo°φ seskupenφ ze zdrojovΘho textu napsanΘho v IL.)Ildasm.exe
Disasembler jazyka IL. Je vybaven grafick²m u₧ivatelsk²m rozhranφm, umo₧≥uje i v²pis do souboru. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework (tedy v jinΘm adresß°i ne₧ ilasm.exe .)Nmake.exe
Microsoftskß analogie znßmΘ utility Make pro °φzenφ p°ekladu a sestavenφ programu pomocφ textov²ch soubor∙. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Sn.exe
Slou₧φ ke generovßnφ äsdφlen²ch jmenô (shared name, takΘ strong name) pro sdφlenß seskupenφ. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Tlbexp.exe
Na zßklad∞ ve°ejn∞ p°φstupn²ch typ∙ v seskupenφ vytvo°φ a exportuje typovou knihovnu pro COM. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Tlbimp.exe
Na zßklad∞ dodanΘ typovΘ knihovny pro COM vytvo°φ °φzenΘ seskupenφ (managed assembly); p°itom zobrazφ (ämapujeô) typy z typovΘ knihovny na typy v prost°edφ .NET. Vytvo°enΘ seskupenφ je t°eba importovat do programu v C#. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Xsd.exe
Nßstroj pro definici schΘmat XML. Jako vstup pou₧ije soubory XML nebo XDR. Najdeme ho v adresß°i s instalacφ SDK pro .NET Framework.Aspnet_regiis.exe
Tento program slou₧φ k registraci serveru IIS. Budeme jej pot°ebovat, jestli₧e si IIS instalujeme pozd∞ji ne₧ prost°edφ .NET.
V ·vodnφm povφdßnφ nelze pochopiteln∞ projφt celou rozmanitost prost°edφ .NRT. Pro zßkladnφ orientaci m∙₧e poslou₧it p°ehled prostor∙ jmen a nßstroj∙, kterΘ jsou v nich k dispozici.
System.Text
System.Text.RegularExpressions
Zßkladem prßce s textem je t°φda string . Pot°ebujeme-li t°φdu, kterß umo₧≥uje m∞nit znakov² °et∞zec ulo₧en² v instanci, pou₧ijeme System.Text.String¡Builder . DalÜφ nßstroje najdeme v uveden²ch prostorech jmen.
System.Text.RegularExpressions
Jako regulßrnφ v²razy se oznaΦujφ v²razy pro vyhledßvßnφ a nahrazovßnφ v textov²ch souborech. Knihovna BCL podporuje prßci s regulßrnφmi v²razy na ·rovni jazyka Perl 5, vΦetn∞ ₧olφk∙ ( ?? , *? , +? a dalÜφch). Prost°edky pro prßci s regulßrnφmi v²razy najdeme v u₧ zmφn∞nΘm prostoru jmen System.Text.RegularExpressions . Jejich zßkladem je t°φda Regex ; v²sledky vyhledßvßnφ reprezentuje t°φda Match , p°φpadn∞ MatchCollection . JednotlivΘ nalezenΘ shody p°edstavujφ instance t°φdy Capture , jejich soubor je ulo₧en v instanci t°φdy CaptureCollection .
System.Collections
V prostoru jmen System.Collections najdeme beztypovΘ kontejnery pro vÜeobecnΘ pou₧itφ, jako je ArrayList (indexovan² seznam), Dictionary (slovnφk, asociativnφ pole), Hashtable (heÜovß tabulka), Queue (fronta), Stack (zßsobnφk), Bit¡Array (bitovΘ pole). V uvedenΘm prostoru jmen najdeme takΘ °adu rozhranφ a n∞kterΘ pomocnΘ t°φdy.
System.IO
System.IO.IsolatedStorage
System.Net.Sockets
Zßkladnφ nßstroje jsou v prostoru jmen System.IO , dalÜφ v prostoru jmen System.IO.IsolatedStorage . Proudy pro prßci se sφtφ najdeme v prostoru jmen System.Net.Sockets . Pro operace s konzolou slou₧φ t°φda System.Console .
System.Net
Zßkladem prßce se sφtφ je generickß architektura po₧adavku a odezvy (generic request/response architecture). Pro vytvo°enφ po₧adavku vΦetn∞ vytvo°enφ zßhlavφ odpovφdajφcφho pou₧itΘmu protokolu na zßklad∞ anal²zy URI slou₧φ t°φda WebRequestFactory .
Abstraktnφ t°φdy WebRequest a WebResponse p°edstavujφ obecn² po₧adavek, resp. odezvu. T°φda WebRequest poskytuje proud typu NetworkStream , umo₧≥ujφcφ Φφst data z odezvy. Tyto t°φdy najdeme v prostoru jmen System.Net . Zde najdeme i specifickΘ nßstroje pro pou₧itφ protokolu HTTP û HttpWebRequest a Http¡WebResponse . (T°φda WebRequestFactory ve skuteΦnosti vytvo°φ instanci odvozenΘ t°φdy v zßvislosti na pou₧itΘm protokolu.)
System.Threading
System.Timers
Nßstroje pro tvorbu vφcevlßknov²ch aplikacφ zahrnujφ mechanizmy pro synchronizaci, jako jsou monitory, mutexy, udßlosti, zßmky pro Φtenφ a zßpis atd. Vedle toho se p°i tvorb∞ vφcevlßknov²ch aplikacφ uplatnφ takΘ atribut System.Thread¡StaticAttribute .
System.Security
System.Security.Cryptography
System.Security.Cryptography.X509Certificates
System.Security.Permissions
System.Security.Policy
System.Security.Principal
Knihovna BCL poskytuje nßstroje pro manipulaci se vÜemi souΦßstmi modelu b∞hovΘho zabezpeΦenφ (Code Access Security Model), vΦetn∞ nßstroj∙ pro Üifrovßnφ.
System.Reflection
System.Reflection.Emit
Reflexe je nßstroj pro pokroΦilΘ manipulace s datov²mi typy, pro vytvß°enφ nov²ch datov²ch typ∙ za b∞hu programu atd
System.Runtime.Serialization
System.Runtime.Serialization.Formatters
System.Runtime.Serialization.Formatters.Soap
System.Runtime.Serialization.Formatters.Binary
Serializace p°edstavuje nßstroj pro uklßdßnφ objekt∙ do datov²ch proud∙ a pro Φtenφ objekt∙ z datov²ch proud∙.
System.Runtime.Remoting
System.Runtime.Remoting.Channels
System.Runtime.Remoting.Channels.Http
System.Runtime.Remoting.Channels.Tcp
System.Runtime.Remoting.Services
Nßstroje pro tvorbu distribuovan²ch aplikacφ zahrnujφ podporu sφ¥ov²ch protokol∙, pro volßnφ vzdßlen²ch procedur a dalÜφ.
System.Web.Services
System.Web.Services.Discovery
System.Web.Services.Protocols
WebovΘ slu₧by jsou svΘrßzn²m druhem distribuovan²ch aplikacφ, kterΘ vyu₧φvajφ zprßv posφlan²ch v jazyce XML. Nßstroje, kterΘ prost°edφ .NET Framework poskytuje, zahrnujφ podporu tvorby, vyhledßvßnφ a vyu₧φvßnφ webov²ch slu₧eb.
System.Data
System.Data.OleDb
System.Data.SqlClient
System.Data.SqlTypes
Podpora databßzov²ch aplikacφ v knihovn∞ BCL vychßzφ z ADO .NET.
System.Xml
System.Xml.Serialization
System.Xml.Serialization.Schema
System.Xml.XPath
System.Xml.Xsl
Knihovna BCL podporuje XML 1.0, schΘmata XML, prostory jmen XML, implementace XSL/T, XPath a SOAP 1.1. Nabφzφ takΘ dva modely anal²zy (DOM-2 a jednu z variant SAX2).
System.Drawing
System.Drawing.Design
System.Drawing.Drawing2D
System.Drawing.Imaging
System.Drawing.Printing
System.Drawing.Text
Tyto nßstroje v knihovn∞ BCL p°edstavujφ GDI+, tedy zabezpeΦen² ekvivalent GDI z Win32.
System.Windows.Forms
System.ComponentModel
System.Windows.Forms.ComponentModel
System.Windows.Forms.Design
System.Windows.Forms.PropertyGridInternal
System.Runtime.InteropServices
System.Runtime.InteropServices.CustomMarshaller
System.Runtime.InteropServices.Expando
B∞hov² systΘm prost°edφ .NET podporuje obousm∞rnou spoluprßci s ne°φzen²m k≤dem prost°ednictvφm COM, COM+ a volßnφ knihoven DLL. BCL k tomu ·Φelu poskytuje °adu t°φd a atribut∙, vΦetn∞ °φzenφ doby ₧ivota objekt∙ nebo vytvß°enφ u₧ivatelsk²ch marshaller∙.
Literatura
• Jeffrey Richter: Applied Microsoft .NET Framework Programmig . Microsoft Press 2002.
ISBN 0-7356-1422-9. (╚esky: .NET Framework û programovßnφ aplikacφ , Grada Publishing 2002, ISBN 80-247-0450-1.)
- Andrew Troelsen: C# and the .NET Framework Platform . Apress, 2002. ISBN 1-893115-59-3.
• International standard ISO/IEC 23270:2003 . Programming languages û C#.
J. Gough: Compiling for the . NET Common Language Runtime . Prentice Hall, 2002,
ISBN 0-13-062296-6.D. KaΦmß°: Programujeme .NET aplikace . Computer Press, Praha 2001. ISBN 80-7226-569-5
Po tomto obecnΘm ·vodu se zaΦneme zab²vat problematikou prßce se seskupenφm: Jak vytvo°it a jak instalovat soukromΘ seskupenφ, jak vytvo°it a jak instalovat sdφlenΘ seskupenφ, kde ho b∞hov² systΘm prost°edφ .NET hledß, jak je to se zabezpeΦenφm, jak vytvo°it konfiguraΦnφ soubor atd.
Miroslav Virius