1 Platforma Microsoft .NETTomasz Gawron Microsoft .NET Framework-Application Development Foundation
2 2.1 Platforma Microsoft .NET.NET Framework - oferuje sposób wytwarzania oprogramowania w oparciu o niezwiązaną z konkretnym językiem programowania platformę składającą się z: wspólnego systemu wykonawczego CLR (Common Language Runtime) biblioteki klas (Class Library) oraz dodatkowych serwerów i narzędzi. .NET Enterprise Servers Windows Server 2003/2008, BizTalk Server, Commerce Server, Content Management Server, Exchange Server, Host Integration Server, Internet Security and Acceleration Server, Operations Manager, Project Server, SharePoint Portal Server, Systems Management Server, SQL Server, … Windows 7, Vista, Windows XP, Windows CE, ... Application System automatyczne zarządzanie (kodem programu, pamięcią, zabezpieczeniami i wyjątkami) Platforma programistyczna środowisko uruchomieniowe: Common Language Runtime (CLR) biblioteka klas: Base Class Library (BCL) operacje na plikach, wyświetlanie grafiki, interakcja z bazami danych, manipulacja XML, kryptografia, algorytmy numeryczne, komunikacja sieciowa Niezwiązana z konkretnym językiem programowania Automatyczne zarządzanie kodem programu pamięcią zabezpieczeniami i wyjątkami Najnowsza wersja: .NET Framework 4 Wprowadzono język pośredni (Microsoft Intermediate Language - MSIL), na który tłumaczone są programy źródłowe zapisywane w wielu językach np. Visual Basic, C++, C#. NET is the combination of: .NET Framework Common language runtime, Basic Framework class library, Class libraries organized into easily comprehensible namespaces ASP.NET Web Services .NET Enterprise Servers The Tool for .NET Development: e.g. Visual Studio .NET 2003, Web Matrix Języki i narzędzia Visual Studio.NET: VB, Visual C++, C#, Jscript Inne: Smalltalk, Eiffel, ... Metoda budowania serwisów .NET Web Services (można też wykorzystać komponenty COM+) Środowisko gdzie serwisy są uruchamiane CLR – Common Language Runtime (dla komponentów: COM+ Services w Windows 2000)
3 Środowisko pracy – IDE Ulepszenia VS2008 Multi-targetingJedno narzędzie do produkcji aplikacji dla różnych wersji .NET Wsparcie dla 2.0, 3.0 i 3.5 Dynamiczne dostosowywanie się środowiska do docelowej platformy Kontrolki, typy projektów, Intellisense itd.. Znaczne ułatwienie migracji starych projektów do VS 2008 Testy jednostkowe Co pojawiło się w 3.0? WCF – uniwersalny model programowania aplikacji opartych o usługi WF – elastyczny, deklaratywny silnik kontrolujący przepływ procesu w oparciu o aktywności Nowości w .NET 3.5 Model programowania oparty o HTTP (REST) Wsparcie dla JSON i ASP.NET AJAX Syndykacja Integracja między WF i WCF (“Silver”) Zmiany w środowisku Visual Studio 2008 Add Service Reference – ulepszone Zintegrowany projektant WF Nowe szablony projektów i elementów składowych Autohost i testowy klient usług (wcftestclient.exe) Edytor konfiguracji WCF
4 Elementy .NET 2.0 FrameworkXML (Extensible Markup Language) Uniwersalna metoda opisywania danych HTTP (Hypertext Transport Protocol) Standardowy protokół WWW, który można używać do współpracy między serwisami SOAP (Simple Object Access Protocol) Bogaty mechanizm do interakcji (wywołania metod, argumenty itd.) między serwisami lub komponentami oparty o XML Browser Apps Web Services Other Local Win32 Message Queuing COM+ (Transactions, Partitions, Object Pooling) IIS WMI Common Language Runtime .NET Framework Class Library ADO.NET and XML XML Web Services User Interface Visual Basic C++ C# ASP.NET Perl Python … Wspólne środowisko uruchomieniowe + biblioteka klas The CLI and .NET languages such as C# and VB have many similarities to Sun's JVM and Java. They are strong competitors. Both are based on a virtual machine model that hides the details of the computer hardware on which their programs run. Both use their own intermediate byte-code, Microsoft calling theirs Common Intermediate Language (CIL; formerly MSIL) and Sun calling theirs Java bytecode. On .NET the byte-code is always compiled before execution, either Just In Time (JIT) or in advance of execution using the ngen.exe utility. With Java the byte-code is either interpreted, compiled in advance, or compiled JIT. Both provide extensive class libraries that address many common programming requirements and address many security issues that are present in other approaches. The namespaces provided in the .NET Framework closely resemble the platform packages in the Java EE API Specification in style and invocation . Some concerns and criticism relating to .NET include: Applications running in a managed environment tend to require more system resources than similar applications that access machine resources more directly As JIT languages can be more easily reverse-engineered than native code to algorithms used by an application Newer versions of the framework (3.5 and up) are not pre-installed in versions of Windows Microsoft's .NET Micro Framework is a .NET platform for extremely resource-constrained devices Web Services Standardowy sposób publikowania serwisów WWW i z nimi związanych mechanizmów, za pomocą których owe kontrakty można odnaleźć i zrozumieć
5 Platforma .NET Common Language Runtime (CLR) – środowisko wykonawcze odpowiedzialne za lokalizowanie, wczytywanie oraz zarządzanie typami .NET. Common Language Infrastructure - ECMA-335 Common Type System (CTS) - standard obejmujący sposób reprezentacji typów danych w pamięci komputera Common Language Specification (CLS) - zbiór zasad i reguł, które musi spełnić język programowania aby współpracować z CLI Common Intermediate Language (CIL) - język pośredni (MSIL) składający się z niezależnego od procesora zestawu rozkazów, do którego kompilowane są wszystkie programy korzystające ze środowiska .NET Metadane Common Language Runtime (CLR) Base Class Library (BCL) Common Type System (CTS) Common Language Specification (CLS) Metadata Definition and Semantics Common Intermediate Language (CIL) Instruction Set CLI CLR (ang. Common Language Runtime) odpowiedzialny za lokalizowanie, wczytywanie oraz zarządzanie typami .NET. To trzon całej platformy .NET ponieważ to właśnie do CLR należy zadanie kompilowania i uruchamiania kodu zapisanego językiem kodu pośredniego (CIL). CTS (ang. Common Type System) jest odpowiedzialny za opis wszystkich danych udostępnianych przez środowisko uruchomieniowe. CLS (ang. Common Language Specification) to zbiór zasad definiujących podzbiór wspólnych typów precyzujących zgodność kodu binarnego z dostępnymi kompilatorami .NET Metadane (informacja o strukturze programu) Virtual Execution System (VES) Otwarta specyfikacja Każdy język, który spełni standard ECMA-335 może generować kod rozumiany przez CLR VB.NET, C#, J#, C++/CLI, JScript, Perl, Python, Fortran, Cobol, #Smalltalk, Delphi.NET, DotLisp, Ruby.NET CLR jest implementacją standardu CLI autorstwa Microsoft CTS: standard obejmujący sposób reprezentacji typów danych w pamięci komputera. 2 kategorie typów danych: wartość, referencyjne CLS: zbiór zasad i reguł, które musi spełnić język programowania aby współpracować z CLI Virtual Execution System Uruchamia (JIT), linkuje i ładuje pliki napisane dla CLI Udostępnia usługi takie jak: Garbage collection Code Access Secuirity co mój kod może robić, kto może wołać mój kod Wsparcie dla debugowania Współpraca kodu zarządzanego i nie zarządzanego
6 Standard ECMA C#/CLI Infrastruktura wspólnego języka – pozwala tworzyć dystrybucję platformy .NETdo dowolnych systemów operacyjnych i/lub procesorów Common Language Infrastructure – architektura, CTS, CLS, metadane, biblioteki
7 Common Language Runtime (CLR)Usługi CLR: Zarządzanie kodem (uruchamianie i nadzór nad jego wykonywaniem), Izolowanie obszarów pamięci przydzielonych poszczególnym aplikacjom, Konwersja języka pośredniego IL do kodu maszynowego, Zarządzanie pamięcią (w przypadku obiektów zarządzanych), Dostęp do metadanych (rozszerzonej informacji o typach), Stosowanie zabezpieczeń dostępu kodu do zasobów, Weryfikacja zgodności typów, Obsługa wyjątków i przekazywanie ich pomiędzy różnymi językami programowania, Obsługa współpracy pomiędzy kodem zarządzanym, obiektami COM i starszymi bibliotekami DLL, Automatyzacja tworzenia obiektów, Usługi związane z tworzeniem oprogramowania (debugowanie, profilowanie itp.) Class Loader MSIL to Native Compilers (JIT) Code Manager Garbage Collector (GC) Security Engine Debug Engine Type Checker Exception Manager Thread Support COM Marshaler Base Class Library Support CLI - Common Language Infrastructure - ECMA Standard 335 CLR – implementacja MS standardu CLI, Mono Project –
8 CTS: Common Type SystemZdefiniowano wspólny zestaw typów danych: CTS - Common Type System Typy są dzielone na kategorie: Dzięki temu, że wszystkie języki platformy .NET dzielą jeden wspólny system typów, mogą one korzystać wzajemnie ze swoich danych i w pełni się integrować Reference types: More complex types Allocated on the heap Destroyed through garbage collection Value types: Relatively simple types Typically allocated on the stack Object ValueType Boolean Byte Char Decimal Double Int16 Int32 Single Int64 UInt16 UInt32 UInt64 Class String Array Interface Delegate Reference Types Value Types Enum Structure Others Wszystkie typy danych to albo typy skalarne (bezpośrednie, wartości), albo typy referencyjne. Innym godnym zauważenia faktem jest to, że każdy typ danych dziedziczy pośrednio lub bezpośrednio po typie Object — wszystkie typy referencyjne dziedziczą bezpośrednio po klasie Object, natomiast typy skalarne dziedziczą po klasie ValueType, która z kolei dziedziczy po Object. Typy referencyjne (na przykład Class, Interface, Array, String, zwane też obiektami) przechowują wskaźnik do adresu pamięci, pod którym zapisana jest wartość. Jeśli więc dany adres wskazywany jest przez różne zmienne typu referencyjnego, to zmiana wartości jednej zmiennej spowoduje zmianę wartości wszystkich pozostałych zmiennych. W pewnych sytuacjach konieczne jest, by instancja typu skalarnego mogła być traktowana jak instancja typu referencyjnego — na przykład gdy chcemy przekazać jakąś wartość skalarną w wywołaniu metody, która wymaga, by jej parametry były typu referencyjnego. Gdy zmienna typu skalarnego poddawana jest operacji pakowania (boxing), jej wartość jest umieszczana na stercie w odpowiednio zaalokowanym obszarze pamięci. Języki programowania oparte na CLR z reguły ukrywają proces pakowania. Programista nie musi jawnie wywoływać operacji pakowania — w razie potrzeby jest ono wykonywane automatycznie. Struktury – złożone typ danych (podobne do klas): mogą zwierać pola, metody, właściwości i zdarzenia. Jednak są to typy bezpośrednie, a nie jak klasy typy referencyjne. Tworzone są więc na stosie, a nie na stercie; dostęp do nich jest bezpośredni ( nie poprzez referencję), stąd nie podlegają automatycznemu zarządzaniu pamięcią; w wywołaniach metod struktury przekazywane są przez wartość. Interfejsy – opis zachowania poprzez określenie zbioru definicji funkcji (operacji) bez kodu ich implementacji. To typy (nie klasy) pozwalające na definiowanie klas spełniających podobne funkcje (zachowanie). Do interfejsów można dodawać metody, właściwości, delegaty i zdarzenia. Danych typu interfejsu można użyć w definicjach parametrów lub zmiennych; nie można tworzyć nowych egzemplarzy (przez new ..). Interfejsy są implementowane poprzez klasy. Delegate – referencje (wskaźniki) do funkcji
9 Wspólny zestaw typów danych: Common Type System - CTSTypy wartościowe, skalarne: bool, char, sbyte, byte, short, ushort, int, uint, long, ulong, float, double, struct, enum, decimal umieszczane na stosie bezpośrednio zawierają dane każda zmienna ma swoją kopię Typy referencyjne umieszczane na stercie zmienna zawiera referencję do danych wiele zmiennych może odnosić się do jednego obiektu – operacje na jednej zmiennej mogą mieć wpływ na drugą Typy Value type Reference type Wbudowane int string Użytkownika struct class Typy referencyjne (obiekty) przechowują wskaźnik do adresu pamięci, pod którym zapisana jest wartość. Jeśli więc dany adres wskazywany jest przez różne zmienne typu referencyjnego, to zmiana wartości jednej zmiennej spowoduje zmianę wartości wszystkich pozostałych zmiennych.
10 Common Language SpecificationZestaw zasad umożliwiających współpracę pomiędzy językami Trzy główne elementy: Framework Biblioteka zawierająca kod zgodny z specyfikacją CLS Consumer Język programowania lub narzędzie zaprojektowane aby dać dostęp do cech dostarczonych przez Framework zgodny z CLS Extender Język programowania lub narzędzie zaprojektowane, aby umożliwić wykorzystanie i rozszerzanie Frameworku zgodnego z specyfikacją CLS
11 .NET Framework Języki programowania Common Language SpecificationUżywaj preferowanego przez siebie języka Common Language Specification C++ C# VB Perl J# … Common Language Specification .NET Framework (Base Class Library) ADO .NET and XML ASP .NET Web Forms Web Services Mobile Internet Toolkit Windows Forms Common Language Runtime Operating System „Język C# jest najbardziej atrakcyjny dla programistów, którzy znają Visual C++ lub język Java oraz dla zaawansowanych programistów Visual Basic, którzy tworzą komponenty i szukają łatwego do opanowania języka, wykorzystującego środowisko CLR i biblioteki klas .NET Framework. Zaawansowani programiści, korzystający do tej pory z języka Visual Basic i często odwołujący się bezpośrednio do systemu operacyjnego oraz jego funkcji, mogą nadal pisać w tym języku.” … Microsoft Wskazówki dotyczące wyboru języka Przy języku C++ powinni pozostać programiści, którzy dobrze znają ten język i piszą nowe aplikacje natywne. Natomiast programiści, którzy adaptują kod istniejących aplikacji natywnych, przenosząc go do platformy .NET, powinni skorzystać z rozszerzeń Managed Extensions dla C++. Programiści C++, którzy tworzą nowe aplikacje i komponenty, wykorzystywane przez innych programistów, powinni używać języka C# lub rozszerzeń Managed Extensions dla C++. Język C# jest najbardziej atrakcyjny dla programistów, którzy znają Visual C++ lub język Java oraz dla zaawansowanych programistów Visual Basic, którzy tworzą komponenty i szukają łatwego do opanowania języka, wykorzystującego środowisko CLR i biblioteki klas .NET Framework. Programiści Visual Basic, którzy korzystają z bardziej zaawansowanych możliwości języka, mogą uznać C# za przydatne narzędzie dodatkowe. Zaawansowani programiści, korzystający do tej pory z języka Visual Basic i często odwołujący się bezpośrednio do systemu operacyjnego oraz jego funkcji, mogą nadal pisać w tym języku komponenty niższego poziomu, które będą na przykład wykorzystywane przez innych programistów. Jednak ze względu na fakt, że komponenty te będą wykorzystywane przez innych, warto jest zastanowić się nad programowaniem ich w bardziej rygorystycznym języku zorientowanym obiektowo, takim jak C#. C# jest także dobrym wyborem dla programistów, którzy znają już język Java lub J++ i chcą skupić się na pisaniu nowych aplikacji.Język J# .NET powinien spodobać się wszystkim programistom, którzy programowali w języku J++ i dobrze znają składnię języka Java, ale chcieliby przejść na platformę .NET lub przenieść na nią istniejące aplikacje napisane w języku J++.
12 Język pośredni IL (Intermediate Language) Kod zarządzany (Managed Code)Język pośredni (MSIL) jest niezależnym od procesora zestawem rozkazów, do którego kompilowane są wszystkie programy korzystające ze środowiska .NET. Zawiera on instrukcje niezbędne do ładowania, przechowywania i inicjalizowania obiektów oraz do wywoływania ich metod. Wraz z metadanymi i wspólnym systemem typów, MSIL pozwala na pełną integrację pomiędzy różnymi językami programowania. Kod skompilowany do języka IL jest wejściem do kompilatora JIT (Just-In-Time Compilation) przekształcającego go w kod maszynowy. Kod zarządzany jest to kod zgodny ze specyfikacją CLR (CLS) dostępność metadanych umożliwia realizację usług automatycznego zarządzania zasobami, przezroczystej współpracy fragmentów oprogramowania napisanych w różnych językach programowania, zarządzania uprawnieniami, zarządzania cyklem życia obiektów. Kod pisany w języku C# lub Visual Basic.NET jest domyślnie kodem zarządzanym. Zarządzane dane - są alokowane i zwalniane przez proces odśmiecający (garbage collector) działający w ramach CLR. Managed Code. Code that supplies the metadata necessary for the CLR to provide services such as memory management, cross-language integration, code access security and automatic lifetime control of objects. All code based on IL executes as managed code. Common Intermediate Langage (CIL) – A language used as the output of several compilers and as the input to a JIT compiler. It defines an abstract stack-based execution architecture. The CLR may include several JIT compilers for converting CIL to native code ILASM is an assembly language for the CLR
13 Kompilacja i wykonywanie kodu zarządzanego – .Net Assemblieskompilacją na żądanie - jedynie dla potrzebnych w danej chwili fragmentów możliwe jest skorzystanie z kompilacji podczas instalacji Native Image Generator (NGEN) – ngen.exe Source Code Language Compiler Microsoft Intermediate Language (MSIL) Compilation JIT Compiler Native Code The first time each method is called or before installation Execution csc.exe or vbc.exe Compiler DLL or EXE VB C++ C# Operating System Services Common Language Runtime JIT Compiler Native Code Assembly IL Code Kompilacja w locie, bezpośrednio przed wykonaniem danego fragmentu kodu” kod źródłowy → kod bajtowy (pośredni), program jest rozpowszechniany w postaci kodu pośredniego, na maszynie uruchamiającej program: kod bajtowy → kod maszynowy Zalety tradycyjna maszyna wirtualna interpretuje kod bajtowy, JIT jest wydajniejszy, kompilacja może być zoptymalizowana pod system docelowy system może zbierać statystyki n.t. szybkości działania i dodatkowo optymalizować kod, jeżeli jest taka potrzeba, to można skompilować kod źródłowy do kodu maszynowego Compiling and Executing Managed Code Gdy uruchamiana jest aplikacja wykorzystująca środowisko .NET Framework, podzespoły, składające się na tę aplikację, muszą zostać odnalezione i załadowane do pamięci. Nie są one ładowane tak długo, aż będą potrzebne — jeśli aplikacja nie wywoła żadnej metody z danego podzespołu, nie zostanie on załadowany do pamięci. Nie musi być nawet obecny w systemie. Pierwszym miejscem, w którym CLR szuka podzespołów, jest globalna pamięć podręczna podzespołów (Global Assembly Cache — GAC). Jest to specjalny katalog, w którym przechowywane są podzespoły wykorzystywane przez więcej niż jedną aplikację . Po załadowaniu potrzebnych podzespołów do pamięci, kod aplikacji nadal jest kodem MSIL, który nie może być bezpośrednio wykonywany przez procesor. Potrzebna jest jeszcze jedna kompilacja, która dokona zamiany kodu MSIL na kod maszynowy procesora, na którym uruchomiona będzie aplikacja. Dwie metody kompilacji Najczęściej stosowaną metodą kompilacji kodu MSIL na kod natywny jest załadowanie przez CLR podzespołu do pamięci, a następnie kompilacja każdej metody w momencie pierwszego jej wywołania. Ponieważ każda metoda kompilowana jest tylko w momencie pierwszego uruchomienia, proces kompilacji nazywa się kompilacją w samą porę (just-in-time compilation — JIT). Kompilacja JIT umożliwia kompilowanie tylko tych metod, które są rzeczywiście wykorzystywane. Jeśli metoda została załadowana do pamięci razem z całym podzespołem, ale nigdy nie została wywołana, pozostanie w postaci MSIL. Skompilowany kod maszynowy nie jest zapisywany z powrotem na dysk twardy — przy ponownym uruchomieniu aplikacji kod MSIL będzie musiał zostać ponownie skompilowany. Inną metodą kompilacji jest wygenerowanie całego kodu binarnego danego podzespołu z użyciem narzędzia Native Image Generator (NGEN), dostępnego w .NET Framework SDK. Narzędzie to, uruchamiane poleceniem ngen.exe, kompiluje cały podzespół i umieszcza jego kod maszynowy w obszarze zwanym pamięcią podręczną obrazów kodu natywnego (Native Image Cache). Pozwala to na szybsze uruchamianie aplikacji, ponieważ podzespoły nie muszą już być kompilowane metodą JIT.
14 Just-in-Time (JIT) IL jest kompilowany do kodu procesora podczas wykonywania programu IL // Point pt = new Point(); .locals init ([0] class Point pt) newobj instance void Point::.ctor() stloc.0 // pt.x = 200; ldloc.0 ldc.i4 0xc8 stfld int32 Point::x // pt.y = 300; ldc.i4 0x12c stfld int32 Point::y C# Point pt; pt = new Point(); pt.x = 200; pt.y = 300; dev-time compile run-time compile Intel x86 call FD5B0AD ; allocate mov ecx, eax ; ecx == pt call dword ptr ds:[003E5144h] ; pt.ctor mov dword ptr [ecx+4], 0C8h ; pt.x = 200 mov dword ptr [ecx+8], 12Ch ; pt.y = 300 Około 100 instrukcji . Portable and less brittle Optimized for target machine, not development machine Never interpreted!!
15 Podzespoły (assemblies) (1)Assemblies (podzespoły, zestawy) - logiczne bloki, skompilowane do kodu pośredniego IL, z jakich buduje się aplikacje .NET; zawierają kod w języku IL oraz metadane; opatrzone numerem wersji i stanowiące spójną całość pakiety udostępniające określoną funkcjonalność. Dwa rodzaje metadanych: opisujące podzespół jako jednostkę – manifest oraz metadane opisujące indywidualne typy w podzespole. Manifest jest częścią podzespołu, opisujący jego kod i zasoby poprzez określenie: nazwy podzespołu (tożsamości podzespołu) numeru wersji i kultury (informacje o regionach i językach obsługiwanych przez podzespół) podpisu cyfrowego podzespołu (jeżeli podzespół ma być używany przez różne aplikacje - strong name) plików składających się na podzespół typów i zasobów składających się na podzespół, wraz z informacją, które z nich są eksportowane, powiązania z innymi podzespołami (np. mscorlib.dll), zestawu uprawnień niezbędnych do poprawnego działania podzespołu Podzespół składa się z jednego lub większej ilości plików EXE lub DLL, które zawierają kod IL oraz zasoby aplikacji. Każdy z zarządzanych typów posiada znacznik określający czy może być on używany jedynie przez typy znajdujące się w tym samym podzespole, czy również spoza niego. Standard Elements Assembly name Version information Strong name information Culture information Processor and OS Files that make up this assembly References to types and resources Exported and local types Custom Elements AssemblyCompany AssemblyConfiguration AssemblyCopyright AssemblyDefaultAlias AssemblyDescription AssemblyInformationalVersion AssemblyProduct AssemblyTitle AssemblyTrademark Definiowanie podzespołu: Assembly Generation Utility - Al.exe, IDE Odczyt zawartości podzespołu: Disassembler – ildasm.exe
16 Podzespoły (assemblies): MetadaneMetadane typów - to szczegółowy opis typów zdefiniowanych w kodzie zarządzanym, z którym są związane. Opis ten przechowywany jest w tym samym pliku, w którym znajduje się kod MSIL. Informacje te zawierają: class A { ... } class B { ... } Prog.cs class C { ... } Lib.cs csc Prog.cs,Lib.cs metadata CIL code of A CIL code of B CIL code of C Prog.exe loader manifest Opis typów nazwę typu, zasięg typu (publiczny lub w granicach podzespołu), nazwę typu, po którym dziedziczy opisywany typ, implementowane interfejsy, implementowane metody, udostępniane właściwości, obsługiwane zdarzenia. Atrybuty – dodatkowe informacje o elementach kodu -adnotacje atrybuty mają określone nazwy i funkcje, definiowane przez różne części środowiska .NET Framework mogą one służyć do sterowania sposobem wykonywania kodu, opisać wymagania bezpieczeństwa Programiści znający technologię COM zauważą, że rola metadanych zbliżona jest do roli biblioteki typów COM (COM type library). Informacje te są bardzo szczegółowe. Na przykład opis każdej metody zawiera informacje o jej parametrach i typach tych parametrów, a także informację o typie zwracanej przez tę metodę wartości. Ponieważ metadane zawsze towarzyszą kodowi pośredniemu, wiele narzędzi wykorzystuje ich obecność. Na przykład z metadanych korzysta funkcja IntelliSense w Visual Studio .NET, wyświetlająca listę metod zaimplementowanych w klasie, której nazwę programista tuż przed chwilą wpisał. Atrybuty pozwalają określić, które metody mają zostać udostępnione jako usługi Web Service, wywoływane za pomocą protokołu SOAP metadata is used for: - dynamic loading - versioning - reflection
17 Podzespoły (assemblies) (2)Po skompilowaniu do kodu IL, zarządzany kod jest częścią podzespołu podzespół zawiera jedną lub wiele DLLs or EXEs Podzespoły mogą być używane jako prywatne albo współdzielone Podzespół prywatny jest instalowany poprzez kopiowanie do folderu nie wymagane jest umieszczenie w rejestrze Są podstawą bezpieczeństwa kodu Pobierany kod może mieć przydzielone uprawnienia + strong name GAC – global assembly cache Metadata for Classes X, Y and Z app1.dll Code for Class X Code for Class Y Code for Class Z Assembly A Manifest Once compiled, all managed code is part of an assembly Each assembly contains one or more DLLs or EXEs Each assembly has a manifest describing its contents An assembly is installed by copying it into a directory They don’t require registry entries Assemblies are the basis for code security Downloaded code can be granted specific permission based on where it came from, who published it, and more Podzespoły współdzielone są zazwyczaj instalowane w tzw. globalnym cache podzespołów (global assembly cache - GAC) umiejscowionym domyślnie w podkatalogu assembly katalogu systemowego. Wszystkie klasy dostarczane wraz z platformą .NET Framework są skompilowane do postaci podzespołów współdzielonych. Metadata for Classes P and Q app2.exe Code for Class P Code for Class Q Assembly B Metadata for Class R app3.dll Code for Class R Manifest
18 Podzespoły - wdrażanie, obsługa wersji (3)Umieszczanie podzespołu w katalogu aplikacji (…\bin) - nie wymagane żadne wpisy do rejestru Współużytkowanie podzespołów – umieszczenie ich w globalnej pamięci podręcznej podzespołów GAC (global assembly cache) \WINNT\assembly, \WINDOWS\assembly, GACUTil.exe – SDK Rozróżnianie podzespołów – poprzez silną nazwę (strong name) generowana z wykorzystaniem kluczy kryptograficznych (sn.exe) i nazwy podzespołu Podpis cyfrowy podzespołu – możliwość sprawdzenia integralności przy ładowaniu podzespołu Usunięcie problemu „piekła dll-i” Wersja podzespołu – charakteryzowana przez: numer kompatybilnościowy wersji (compability version) składający się z numerów: główny (major), drugorzędny (minor), kompilacji (build), korekty (revision) np wersję informacyjną (information version) – ciąg znaków czytelnych dla ludzi numery wersji zewnętrznych podzespołów od których jest zależny Generator podzespołów wykonuje operację haszowania na treściach przy użyciu klucza prywatnego I zapisuje wyniki w manifeście. Kiedy loader pobiera, podzespół wykonuje te same procedury haszowania na plikach podzespołów, deszyfruje za pomocą klucz publiczneogo skrót zapisany i porównuje wyniki
19 Podzespoły zewnętrzeneWywoływanie zewnętrznych podzespołów Dodaj referencję Użyj pełnej nazwy System.Drawing.Bitmap bmp =new System.Drawing.Bitmap(50, 50); Użyj dyrektwy using using System.Drawing;
20 Struktura wykonawcza aplikacji .NETDomena aplikacji (application domain) – jednostka logiczna, w obrębie której działają aplikacje .NET; jest wirtualnym procesem, którego zadaniem jest izolowanie od siebie poszczególnych aplikacji .NET. Stack Heap Class Y Class Z JIT Compiler Method 4 Method 3 Method 2 Method 1 Class X Loader Common Language Runtime App Domain Garbage Collector Metadata for Classes X, Y and Z Assembly Domena aplikacji jest wirtualnym procesem, którego zadaniem jest izolowanie od siebie poszczególnych aplikacji .NET. Wszystkie obiekty tworzone obrębie jednej aplikacji są tworzone w tej samej domenie. W jednym rzeczywistym procesie systemu operacyjnego może istnieć wiele domen aplikacji, co jest znacznie mniej kosztowne niż tworzenie oddzielnego procesu dla każdej aplikacji. Ma to znaczenie szczególnie w przypadku dużych serwerów Web. CLR zarządza wykorzystaniem pamięci przez kod działający obrębie domeny aplikacji pilnuje, aby nie korzystał on z obszarów znajdujących się poza jej granicami. Dla każdej aplikacji webowej Htttp Runtime ASP.NET tworzy wyizolowany Application Domain. Application domain is a construct in the CLR that is the unit of isolation for an application. The isolation guarantees the following: An application can be independently stopped. An application cannot directly access code or resources in another application. A fault in an application cannot affect other applications. Configuration information is scoped by application. This means that an application controls the location from which code is loaded and the version of the code that is loaded. The CLR allows multiple applications to be run in a single process by loading them into separate application domains. Additionally, the CLR verifies that user code in an application domain is type safe. A CLR host is an application that is responsible for loading the CLR into a process, creating application domains within the process, and executing user code within the application domains. Examples of hosts that ship with the .NET Framework include: ASP.NET. An ISAPI filter that ships with ASP.NET loads the CLR and does the initialization necessary to handle web requests. Internet Explorer. A MIME filter hooks into Internet Explorer versions 5.01 and higher to execute managed controls referenced from HTML pages. Shell Executables. When a managed application is launched from a shell, a small piece of unmanaged code loads the CLR and transitions control of the application to the CLR. System.AppDomain –udostępnia metody i właściwości dla zarządzania domenami: utworzenie, usunięcie domeny aplikacji z procesu, wyliczenie zawieranych podzespołów, …
21 Elementy .NET Framework 3.5LINQ ASP.NET 3.5 CLR Add-in Framework Dodatkowe rozszerzenia .NET Framework SP1 Windows Presentation Foundation Windows Communication Foundation Windows Workflow Foundation Windows CardSpace Nowe cechy języka: Ułatwiona inicjalizacja obiektów oraz kolekcji, Metody rozszerzające, Typy anonimowe LINQ, Nieokreślone typy zmiennych, Wyrażenia Lambda, Metody „częściowe” (partial) VS2008 Główne narzędzie do tworzenia aplikacji dla WS 2008, Vista i Microsoft Office 2007 .NET Framework 3.5 design surfaces Wsparcie dla Office 2007 (m.in. nowe VSTO i wsparcie dla ClickOnce) Standardowe wsparcie dla kontrolek Windows Vista Zmiany dla web developerów Ulepszony designer HTML / CSS Zintegrowane wsparcie dla AJAX i JavaScript Zmiany w językach Multi-targeting Ulepszona praca na danych w VB / C# .NET Framework SP1 21
22 .NET Framework 3.5 Windows Presentation FoundationUmożliwia łatwe łączenie tekstu, grafiki i multimediów (animacja, dźwięk, wideo) Budowanie interfejsów przy pomocy deklaratywnego języka opisu wyglądu aplikacji XAML (Extensible Application Markup Language) Wsparcie grafiki wektorowej Wykorzystanie akceleracji sprzętowej Dwa modele aplikacji: zwykła (desktop), uruchamiana w przeglądarce – XBAP (XAML Browser Applications) Windows Communication Foundation WCF – uniwersalny model programowania aplikacji oparty o usługi Wspólny komponent dla różnych technologii związanych z komunikacją: COM/COM+, .NET Remoting, Usługi, ASP.Net Webservices, Kolejkowanie wiadomości Wsparcie dla ASP.Net/Ajax Wsparcie dla syndykacji (RSS/Atom) Integracja między WF i WCF LINQ - Language INtegraeted Query integruje język zapytań bazodanowych bezpośrednio w językach programowania .NET do LINQ to Objects, LINQ to DataSets, LINQ to SQl, LINQ to Entities, LINQ to XML Służy do tworzenia interfejsu użytkownika, każda operacja graficzna jest wykonywana poprzez DirectX WCF: Model programowania oparty o HTTP (REST) Wsparcie dla JSON i ASP.NET AJAX Zmiany w środowisku Visual Studio 2008 Add Service Reference – ulepszone Zintegrowany projektant WF Nowe szablony projektów i elementów składowych Autohost i testowy klient usług (wcftestclient.exe) Edytor konfiguracji WCF WF – elastyczny, deklaratywny silnik kontrolujący przepływ procesu w oparciu o aktywności Model programowania oparty o HTTP (REST) Syndykacja Jest to maszyna stanu „czytająca” przepływ i ją wykonuje– dodajmy tylko referencje Wbudowany designer dla WPF (“Cider”) Edycja XAML-a w ramach IDE Wprowadzane zmiany widoczne od ręki IntelliSense Wsparcie dla dystrybucji z użyciem technologii ClickOnce Gotowe szablony projektów Współpraca z debuggerem Koegzystencja z Winforms Możliwość współpracy projektant-programista Integracja z Expression Blend XBAP Wsparcie dla FireFoxa Wsparcie dla usług WCF Współdzielenie cookies Nowe elementy UIElement3D Viewport2DVisual3D Zwiększenie wydajności (cold start, animacje, lepsze wsparcie dla akceleracji sprzętowej) Windows Workflow Foundation Workflow – grupa czynności Framework do budowy przepływów prac Podstawowe Activity, Persistence Service, Tracking, Synchronizacja 22
23 .Net Framework 4.0 Parallel LINQ (PLINQ) Task Parallel Library (TPL)Wsparcie dla IronPython, IronRuby i F# Wsparcie dla Code Contracts Improve support for parallel computing, which target multi-core or distributed systems.[28] To this end, they plan to include technologies like PLINQ (Parallel LINQ),[29] a parallel implementation of the LINQ engine, and Task Parallel Library, which exposes parallel constructs via method calls.[30] Full support for IronPython, IronRuby, and F#.[31] Support for a subset of the .NET Framework and ASP.NET with the "Server Core" variant of Windows Server 2008 R2.[32] Support for Code Contracts. 23
24 Biblioteki klas Przestrzenie nazw :Elementy biblioteki klas .NET Framework, pogrupowane są za pomocą hierarchicznej struktury przestrzeni nazw (namespace) ok namespaces z około 2000 tyów Umożliwiają dostęp do usług systemowych i zostały zaprojektowane tak, aby stanowiły podstawę do tworzenia aplikacji, komponentów i kontrolek .NET Przestrzenie nazw : System - zawiera klasy, które definiują najczęściej używane typy danych, zdarzenia, procedury obsługi zdarzeń, interfejsy, atrybuty i wyjątki. System.Collections - zawiera klasy obsługi kolekcji obiektów - list, kolejek, tablice bitów, słowników System Int32, String, … Data Windows Web XML Connection, DataSet, … UI Services … Forms XmlDocument, … EnterpriseServices ServicedComponent, … Zadaniem przestrzeni nazw jest zawężenie zakresu, w którym obowiązują nazwy typów; w aplikacji mogą istnieć klasy o tej samej nazwie pod warunkiem, że są zdefiniowane w różnych przestrzeniach nazw. Są to zbiory zdefiniowanych klas, pogrupowanych w pewnego rodzaju „paczki”.
25 .NET Framework Class LibraryADO.NET and XML .NET Base Class Library (BCL) Web Forms Web Services Mobile Internet Toolkit Windows Forms ASP.NET System.Web Configuration SessionState Caching Security Services Description Discovery Protocols UI HtmlControls WebControls Design Component Model System.Windows.Forms Imaging Drawing2D Text Printing System.Drawing System.Data Common OleDb SQLTypes SqlClient System.Xml XPath XSLT Serialization Globalization Diagnostics Collections Resources Reflection Net IO Threading ServiceProcess Runtime InteropServices Remoting Umożliwiają dostęp do usług systemowych i zostały zaprojektowane tak, aby stanowiły podstawę do tworzenia aplikacji, komponentów i kontrolek .NET
26 Framework Class Libraries (2) - przykładySystem.Windows.Forms - klasy dla budowy aplikacji działających pod kontrolą systemu MS Windows: Windows Form Application: provides a message loop Many controls, including : Button, TextBox, CheckBox, RadioButton, ListBox, ComboBox, OpenFileDialog The basic model is placing controls on a form System.Runtime.Remoting - .NET Remoting jest zbiorem klas pozwalającym na komunikacje między aplikacjami (app domain) zarówno w obrębie jednego komputera jak i poprzez sieć. protokoły HTTP/TCP tylko do komunikacji między aplikacjami opartymi na .NET System.Runtime.InteropServices - klasy obsługujące współpracę z modelem COM i wywoływanie usług systemowych System.Web.Services - klasy umożliwiające tworzenie usług webowych XML Web Services oraz klientów tych usług. …. System.Data - zawiera klasy składające się na architekturę dostępu do danych ADO .NET. Allows access to stored data The focus is on data in a relational DBMS Other kinds of data can also be accessed, such as XML documents System.XML - klasy umożliwiające przetwarzanie dokumentów XML Remoting means accessing objects in a foreign app domain This app domain might be in the same process, a different process, or a different machine Uses types in System.Runtime.Remoting Remoting relies on: Client proxy objects Channel objects provided by The TCP channel The HTTP channel
27 Biblioteka klas .NET Przestrzeń nazw Opis SystemPodstawowe klasy, które definiują najczęściej używane typy danych, zdarzenia, procedury obsługi zdarzeń, interfejsy, atrybuty i wyjątki. Inne klasy w tej przestrzeni nazw udostępniają usługi związane z konwersją typów danych, manipulowaniem parametrami metod, obliczeniami matematycznymi, zdalnym i lokalnym wywoływanie programów, zarządzaniem środowiskiem aplikacji, oraz nadzorowaniem zarządzanego i niezarządzanego kodu System.CodeDom Reprezentacja elementów i struktury kodu źródłowego dokumentu System.ComponentModel Tworzenie komponentów i kontrolek, rejestracja i adaptacja w czasie projektowania System.Collections, System Collection.Generic Definiują różne kolekcje obiektów - listy, kolejki, tablice bitów, tablice skrótów (ang. hashtables) i słowniki (ang. dictionaries). System.Configuration Programowy dostęp do ustawień konfiguracyjnych .NET Framework i podzespołów oraz obsługa błędów w plikach konfiguracyjnych (pliki *.config) i tworzenie własnych instalatorów. System.IO Podstawowy dostęp i zarządzanie strumieniami danych. Zawiera typy umożliwiające synchroniczny i asynchroniczny odczyt i zapis do strumieni danych i plików. System.Text Kodowanie znaków, konwersje znaków i manipulacje łańcuchami znaków System.TextRegular Expression Obsługa wyrażeń regularnych Zawiera klasy i interfejsy które pozwalają na System.IO Przestrzeń nazw System.IO umożliwia wszechstronny dostęp do systemu plików oraz zarządzanie nim. Obiekty typu Reader i Writer pozwalają na dostęp do plików binarnych, plików tekstowych i do strumieni. Obiekty File, Directory i Path umożliwiają zarządzanie systemem plików. Zdefiniowano również odpowiednie obiekty Exception do obsługi błędów dostępu do plików. Przestrzeń nazw System.IO.IsolatedStorage umożliwia tworzenie izolowanych magazynów, pozwalających zabezpieczyć poufne dane przed odczytem przez kod o niskim poziomie zaufania
28 Biblioteka klas .NET - DaneSystem.Data Dostęp i zarządzanie danymi i źródłami danych. Architektura dostępu do danych ADO.NET, umożliwia tworzenie komponentów, które pozwalają na wydajne zarządzanie danymi pochodzącymi z różnych źródeł. System.Data.Common Klasy współdzielone przez dostawców danych .NET Framework. Dostawca danych - to zbiór klas pozwalających na korzystanie z danych pochodzących z określonego źródła, np. bazy danych. System.Data.ODBC Klasy składające się na dostawcę danych dla interfejsu ODBC (.NET Framework Data Provider for ODBC) System.Data.OleDB Klasy składające się na dostawcę danych dla interfejsu OleDB (.NET Framework Data Provider for OleDB) System.Data.SqlClient Klasy składające się na dostawcę danych dla serwera MS SQL Server (.NET Framework Data Provider for SQL Server). System.Data.SqlTypes Klasy reprezentujące rodzime typy danych serwera Microsoft SQL Server. Pozwalają one na bezpieczniejsze i wydajniejsze korzystanie z danych pochodzących z tego serwera. System.Linq Typy używane w programowaniu dostępu do danych za pomocą języka wyrażeń zapytań System.XML Zgodna ze standardami obsługa przetwarzania XML’a System.XML.Serialization Odwzorowanie obiektów XML i odwrotnie Do przestrzeni nazw System.Data należą głównie klasy, które są składnikami architektury ADO.NET. Architektura ta umożliwia tworzenie komponentów, pozwalających na wydajne zarządzanie danymi pochodzącymi z wielu różnych źródeł. Możliwa jest praca bez podłączenia do serwera baz danych — pobranie danych z bazy, praca z tymi danymi bez utrzymywania połączenia z serwerem, a następnie synchronizacja wprowadzonych zmian. Architektura ADO.NET jest także wykorzystywana przez aplikacje Windows Forms i ASP.NET. Przestrzeń nazw System.Data zawiera klasy współdzielone przez dostawców danych .NET Framework. Dostawca danych to zbiór klas pozwalających na korzystanie z danych pochodzących z określonego źródła, np. z bazy danych. Architektura ADO.NET pozwala także na obsługę baz danych na dedykowanej urządzeniom przenośnym platformie .NET Compact Framework, z wykorzystaniem serwera SQL Server CE Edition. System.Data.ODBC — zawiera klasy dostawcy danych interfejsu ODBC, System.Data.OleDB — zawiera klasy dostawcy danych OleDB, System.Data.SqlClient — zawiera klasy dostawcy danych serwera MS SQL Server. Klasy przestrzeni nazw System.Xml zapewniają pełne i zgodne ze standardami wsparcie przetwarzania dokumentów XML. Standardy obsługiwane przez klasy przestrzeni System.XML to: XML 1.0 wraz z obsługą DTD, przestrzenie nazw XML, schematy XSD, wyrażenia XPath, transformacje XSLT, DOM poziomu 1. i 2.
29 Biblioteka klas .NET Sieć System.NetUdostępnia proste interfejsy programistyczne dla wielu protokołów używanych we współczesnych sieciach. System.Net.Sockets Udostępnia zarządzaną implementację interfejsu Windows Sockets. Usługi infrastruktury działania System.Runtime Przestrzeń nazw obsługuje funkcje takie jak serializacja, remoting, interoperacyjność. System.Runtime.InteropServices Udostępnia różnorodne klasy obsługujące współpracę z modelem COM i wywoływanie usług systemowych. System.Runtime.Remoting Wsparcie dla tworzenia ściśle lub luźno powiązanych aplikacji rozproszonych System.Runtime.Serialization Klasy używane do serializowania i deserializowania obiektów. Proces serializacji polega na konwersji obiektu lub całego grafu obiektów do postaci liniowej sekwencji bajtów, którą można następnie zachować lub przesłać do innej lokalizacji. Deserializacja jest procesem odwrotnym. System.Threading Klasy i interfejsy umożliwiające programowanie wielowątkowe. Bezpieczeństwo System.Security Dostęp do podsystemu zabezpieczeń .NET Framework, zarządzanie zasadami, zezwolenia, sprawdzanie stosu System.Security.Cryptography Usługi kryptograficzne, w tym bezpieczne kodowanie i dekodowanie danych, tworzenie skrótów jednokierunkowych, generowanie liczb losowych i uwierzytelnianie komunikatów. System.Runtime.Serialization Przestrzeń nazw System.Runtime.Serialization zawiera klasy pozwalające na serializację i deserializację obiektów. Serializacja jest to proces konwersji obiektu (lub grupy powiązanych ze sobą obiektów) w ciąg bajtów, który może zostać zapisany lub przesłany do innego komputera. Deserializacja to proces odwrotny, polegający na odtworzeniu obiektów na podstawie ciągu bajtów uzyskanego w procesie serializacji. System.Runtime.Remoting Przestrzeń nazw System.Runtime.RemotingSystem.Runtime.Remoting zawiera klasy i interfejsy pozwalające programistom tworzyć i konfigurować aplikacje rozproszone. Klasa RemotingConfiguration zawiera metody służące do operowania na ustawieniach konfiguracyjnych, które mogą być przechowywane w postaci plików XML. Klasa RemotingServices zawiera metody umożliwiające publikowanie i wywoływanie zdalnych obiektów. System.Runtime.InteropServices Klasy przestrzeni nazw System.Runtime.InteropServices umożliwiają współpracę z obiektami COM. Są w niej zdefiniowane funkcje konwersji typów danych, wykorzystywanych przez COM, na typy danych zgodne ze środowiskiem .NET. Możliwa jest taka komunikacja z serwerami COM, jakby były obiektami .NET z pełną obsługą wyjątków i bibliotek typów COM (COM Type Library). Więcej informacji na ten temat zawiera podrozdział Mieszanie kodu zarządzanego i niezarządzanego.
30 Biblioteka klas .NET Usługi platformy System.DiagnosticsObsługa i diagnostyka aplikacji; interakcje z procesami systemowymi, dziennikami zdarzeń i licznikami wydajności. W tej przestrzeni nazw znajdują się klasy umożliwiające debugowanie aplikacji i śledzenie wykonywania kodu. System.DirectoryServices Umożliwia wygodny dostęp do Active Directory z poziomu kodu zarządzanego. System.Management Narzędzia zarządzania usługami i aplikacjami zgodnie z WBEM (Web Based Enterprise Management) System.Messaging Dostęp i zarządzanie MSMQ, wysyłanie i odbieranie wiadomości System.ServiceProcess Instalacja i wykonywanie usługowych Windows System.Timers Zawiera komponent Timer umożliwiający wywoływanie zdarzenia w określonych odstępach czasu. Odbicia System.Reflection Dostęp do metadanych typów, podzespołów oraz dynamicznego tworzenia typów i odwoływania się do nich Globalizacja i lokalizacja System.Globalization Wsparcie dla lokalizacji i globalizacji (wielojęzykowści aplikacji) kodu i zasobów System.Resources Zarządzanie i dostęp do zasobów
31 Biblioteka klas .NET - usługi WEBSystem.Web Wsparcie dla zarządzania, komunikacji i projektowania serwerów i klientów oraz usług internetowych XML Web Services; m.i.: manipulacje plikami cookie, transfer plików, obsługę wyjątków, zarządzanie buforem wyjściowym, stanem sesji. System.Web.Caching Kasy pozwalające na buforowanie często używanych danych po stronie serwera. System.Web.Configuration Klasy pozwalające na odczyt i modyfikację konfiguracji ASP .NET System.Web.Mail Klasy umożliwiające tworzenie i wysyłanie wiadomości System.Web.Security Klasy używane do implementowania zabezpieczeń ASP .NET w aplikacjach sieci Web. System.Web.Services Klasy umożliwiające tworzenie usług webowych XML Web Services oraz klientów tych usług. System.Web.SessionState Klasy i interfejsy umożliwiające przechowywanie danych specyficznych dla poszczególnych klientów aplikacji ASP .NET. Informacje o stanie sesji dają użytkownikowi wrażenie stałego połączenia z aplikacją. Informacje o stanie sesji mogą być przechowywane w lokalnej pamięci procesu na serwerze Web lub np. w zewnętrznej bazie danych SQL Server. Aplikacje rozproszone, przepływy prac System.ServiceModel Budowanie aplikacji rozproszonych za pomocą API WCF System.Workflow.Runtime System.Workflow.Activities Budowanie aplikacji rozproszonych za pomocą API WF Usługi internetowe XML Web Services, znajdujące się w przestrzeni nazw System.Web.Services, to interfejs umożliwiający komunikację z użyciem protokołu SOAP, bezpośrednio przez Internet, pomiędzy rozproszonymi aplikacjami stanowiącymi jedno zintegrowane rozwiązanie. Na platformie .NET Framework usługi Web Services zaimplementowane są jako część technologii ASP.NET, która obsługuje wszystkie interfejsy internetowe. Dzięki temu programista nie musi wkładać dużo wysiłku w programowanie. Aby wskazać, że dana metoda powinna być dostępna jako usługa internetowa, wystarczy użyć odpowiedniego atrybutu, a środowisko .NET Framework zajmie się resztą. Klasy, znajdujące się w przestrzeni nazw System.Web.Services, umożliwiają tworzenie usług internetowych XML Web Services, pozwalających na komunikowanie się pomiędzy aplikacjami pracującymi na różnych platformach, urządzeniach i pod kontrolą różnych systemów, z użyciem standardów takich jak HTTP, XML, XSD, SOAP i WSDL.
32 Biblioteka klas .NET GUI System.DrawingUmożliwia dostęp do podstawowej funkcjonalności graficznej biblioteki systemowej GDI+. System.Drawing.Drawing2D Udostępnia zaawansowaną funkcjonalność związaną z grafiką 2D i grafiką wektorową. System.Drawing.Text Udostępnia zaawansowaną funkcjonalność związaną z typografią i wykorzystaniem kolekcji czcionek. System.Windows.Forms Funkcje interfejsu użytkownika dla aplikacji działających pod kontrolą systemu Windows. System.Web.UI Klasy i interfejsy pozwalające na tworzenie kontrolek i stron składających się na interfejs użytkownika aplikacji ASP .NET. System.Web.UI.HtmlControls Klasy umożliwiające tworzenie kontrolek HTML działających po stronie serwera. Kontrolki HTML są mapowane bezpośrednio na tagi HTML interpretowane przez przeglądarki internetowe i pozwalają na programowe manipulowanie elementami HTML na stronie internetowej. System.Web.UI.WebControls Klasy umożliwiające umieszczanie na stronie internetowej kontrolek webowych działających po stronie serwera. Zaliczają się do nich elementy formularzy, takie jak przyciski i pola tekstowe, oraz kontrolki takie jak kalendarz czy DataGrid. Kontrolki webowe mogą być manipulowane za pośrednictwem kodu działającego po stronie serwera, a ich model obiektowy niekoniecznie musi przekładać się bezpośrednio na kod HTML. Przestrzeń System.Windows.Forms zawiera klasy definiujące kontrolki, klasy pozwalające tworzyć kontrolki użytkownika, klasy odpowiedzialne za tworzenie okien aplikacji i okien aplikacji wielodokumentowych (MDI), okna dialogowe i inne. Zapewniona jest także obsługa standardowych okien dialogowych (otwieranie plików, ustawienia wydruku, podgląd wydruku i inne), a także tworzenie menu i etykiet podpowiedzi (tooltip). Web Forms — interfejs użytkownika aplikacji internetowych ASP.NET — znajduje się w przestrzeni nazw System.Web.UI. Kontrolki są wyświetlane w aplikacji klienckiej (przeglądarce), ale ich kod uruchamiany jest na serwerze. Co prawda jest to związane z przesyłaniem sporej ilości danych, jednak dzięki temu możliwe jest upodobnienie działania interfejsu aplikacji internetowej do interfejsu zwykłej aplikacji Windows. Do projektowania interfejsu nie jest konieczna znajomość języka HTML — wystarczy przeciągnąć odpowiednie kontrolki na okno widoku projektu w graficznym środowisku programistycznym. Rozwiązuje to też problem zgodności kodu strony internetowej z różnymi przeglądarkami — w każdej przeglądarce (od urządzeń przenośnych po najnowsze przeglądarki internetowe dla komputerów stacjonarnych) kontrolka wyświetlana jest w najlepszy z możliwych sposobów. Klasy i interfejsy, znajdujące się w przestrzeni nazwy System.Web.UI, zapewniają funkcjonalność umożliwiającą pełną obsługę obiektów kontrolek i stron, obsługę zdarzeń generowanych przez te obiekty, tworzenie kontrolek użytkownika oraz inne funkcje.