Velký problém je nasazování aplikací. Řešením tohoto problému v prostředí .NET je Assembly. Důvodů pro zavedení Assembly je několik:
Aplikace musí být samostatné – snadná instalace nebo reinstalace.
Aplikace musí obsahovat čísla verzí a musí být na ně vázána
Čísla verzí komponent – vedle vlastní verze si musí aplikace pamatovat čísla verzí komponent, které interně používá.
Musí podporovat Side-by-side komponenty – existence dvou a více verzí stejné komponenty na jednom počítači je realitou a jedním z velkých problémů současných instalací.
Musí umožňovat izolaci aplikace – aplikace nesmí být náchylná k poruchám způsobených změnami provedenými na počítači.
Musí zajistit bezpečný přístup ke kódu.
Komponenty musí obsahovat informace o veřejných typech.
Assembly je logickou kolekcí, stávající se z jednoho nebo více .exe, .dll nebo .module souboru a zdrojů doplněných o manifest. Assembly je také často definována jako programová jednotka určená k nasazení a opakovanému použití, řízení verzí a bezpečnosti. Assembly je velice podobná dnešní dynamicky linkované knihovně, jsou však na ní kladeny vyšší požadavky. Tyto vyšší požadavky jsou splněny přidáním tzv. manifestu do Assembly. Manifest je blok metadat obsahující tyto informace:
identita – jméno, verze a kultura;
seznam souborů + kryptografické zabezpečení;
odkaz na další použité assembly + jejich verze;
exportované (veřejně viditelné) typy a zdroje;
bezpečnostní požadavky.
Existují dva typy assembly.
Soukromé assembly – jsou implicitním a doporučovaným typem aplikací v .NET. Jejich instalace (respektive odinstalování) je vlastně pouhé kopírování (respektive mazání). Manifest obsahuje všechny potřebné údaje pro korektní nasazení aplikace. Soukromé assembly si můžeme představit jako interní DLL knihovny pro aplikace vytvářené jednou firmou. Jde o programové jednotky, u nichž se neuvažuje s obecným nasazením.
Sdílené assembly – představují komponenty vytvářené pro obecné použití více aplikacemi. Jako příklad může sloužit knihovna Windows Forms. Nejčastěji jsou instalovány do GAC – Global Assembly Cache. Sdílené assembly jsou strukturálně identické se soukromými. Liší se ve způsobu pojmenování (definují jednoznačné sdílené jméno) a ve způsobu řízení verzí. Složitější je také instalace a odinstalování aplikace.