Title: Was ist .NET? Die .NET Common Language Runtime
1Softwareentwicklung mit .NET Teil 1 Was ist
.NET? Die .NET Common Language Runtime Dr.
Ralph Zeller DI. Wolfgang Beer Michael Willers
2Was ist .NET?
Mit dem .NET Framework können verteilte, XML
basierte Web Applikationen erstellt werden. Zu
einer .NET Plattform gehört ein geeignetes
Betriebssystem und Serversoftware.
3Was gehört zu .NET?
PCs und Smart Devices
Benutzer-sicht
Entwickler Tools
VisualStudio.NET
.NET Framework
Web Services
Identity
Notification
Mobile Information 2001 Server
Host Integration Server 2000
BizTalk Server 2000
Commerce Server 2000
Exchange 2000
SQL Server 2000
ISA Server 2000
Application Center 2000
Infrastruktur
4.NET DesignWeb Services
- Programmatischer Zugriff auf Services im Web
- Kommunikation von Web-Anwendungen untereinander
- XML als Standard für Daten(beschreibung)
- plattform- und sprachunabhängig
- SOAP als Protokoll für Funktionsaufrufe
- plattform- und sprachunabhängig
- Metabeschreibung der Services per XML
- Web Service Description Language WSDL
- in Zukunft per UDDI (Universal Description,
Discovery and Integration)
5.NET Plattform
Common Language Runtime Einheitliche
Klassenbibliothek Visual Studio.NET
Framework Tools
Building Block Services
Ständig verfügbare Internet-Dienste (Code-Updates,
Suchdienste, Messenger)
Infrastruktur
Heutige 2000-Produktfamilie(zukünftig .NET
Enterprise Servers)
Devices
Mobile Geräte, auf denen .NET Anwendungen laufen
(Handy, Handheld)
6Warum eine Runtime?Einheitliches
Integrationsmodell
Layer (VBRUNxx.DLL) (MSVCRT.DLL)
Layer (VBRUNxx.DLL) (MSVCRT.DLL)
Common Language Runtime (MSCOREE.DLL) (MSCORLIB.
DLL)
Microsoft Transaction Server (MTXEX.DLL)
COM Runtime (OLE32.DLL)
COM Runtime (OLE32.DLL)
7Warum ein Framework?Einheitliches
Programmiermodell
8Das .NET Framework
System.Web
System.WinForms
Services
UI
Design
ComponentModel
Description
HtmlControls
Discovery
WebControls
Protocols
System.Drawing
Caching
Security
Drawing2D
Printing
Configuration
SessionState
Imaging
Text
System.Data
System.Xml
ADO
SQL
XSLT
Serialization
Design
SQLTypes
XPath
System
Collections
IO
Security
Runtime
InteropServices
Configuration
Net
ServiceProcess
Remoting
Diagnostics
Reflection
Text
Serialization
Globalization
Resources
Threading
9Ãœbersicht
VB
C
C
ASM Code
Compiler
Compiler
Compiler
IL Code
Common Language Runtime
JIT Compiler
Betriebssystem
10BasicsManaged Code
- Sämtlicher Code wird unter Aufsicht der Common
Language Runtime ausgeführt - Runtime führt Sicherheitsüberprüfungen aus
- Runtime übernimmt Speicherverwaltungund
Fehlerbehandlung (à GC, Exceptions) - Runtime führt Versionsprüfungen aus
- Dieser Code wird mit Managed Code bezeichnet
11BasicsMicrosoft Intermediate Language
- Compiler erzeugen keinen native Code sondern
eine prozessorunabhängige Zwischensprache - Sprachintegration erfolgt auf Codeebene
- MSIL Microsoft Intermediate Language
12BasicsCode wird kompiliert
- IL-Code wird vor der Ausführung immer (!) durch
Compiler in echten Maschinencode übersetzt - Unabhängigkeit von Hardwareplattformen
- unter Windows CE bereits mit einemIL-Vorläufer
im Einsatz
13BasicsCode wird kompiliert
143 Arten von JIT Compiler
- JIT
- EconoJIT
- Gleiche Funktion wie JIT benötigt aber weniger
Ressourcen - Der erzeugte Code nicht so optimiert wie der von
JIT - OptJIT
- Kann nur OptIL verarbeiten und ist dafür
- Schnell
- Benötigt wenig Ressourcen
- Erzeugt optimierten Code.
- Und existiert noch nicht -)
15BasicsCommon Type System
- Das Typsystem wandert vom Compiler in die Runtime
- Typen werden eindeutig
- ein String unter C und ein String unter VB.NET
sind identisch - Sprachen werden interoperabel, da sie das gleiche
Typsystem benutzen - CTS Common Type System
16BasicsImplikationen
- MSIL unterscheidet sich von reinen
Assemblersprachen - komplexe Datentypen und Objekte sind fester
Bestandteil - Konzepte wie Vererbung und Polymorphie werden von
vornherein unterstützt
17BasicsBeispiel 1 Hello World unter .NET
18BasicsImplikationen
- Sprachen werden gleichwertig, da alle Compiler
MSIL-Code erzeugen - eine C Klasse kann von einer VB.NET Klasse
abgeleitet sein - einheitliche Fehlerbehandlung
- Compilerbau wird einfacher
- kein Typsystem
- Sprachen sind perDefinition interoperabel
19Basics Beispiel 2 Integration auf Codeebene
20Common Type SystemDas Objektmodell
Object
Value Type
Boolean
Int64
Byte
Enum
SByte
Char
Single
Type
Currency
TimeSpan
Typen im Namespace System
DateTime
String
TypedRef.
Decimal
UInt16
Double
Array
UInt32
Guid
UInt64
Exception
Int16
Void
Int32
Delegate
21Common Type SystemBeispiel 3 Boxing und Unboxing
22Common Type SystemGleichheit und Identität von
Objekten
- Zwei Objekte sind gleich, wenn deren Inhalte
gleich sind - Zwei Objekte sind identisch, wenn sie die gleiche
Instanz referenzieren - Gleichheit definiert sich über die virtuelle
Methode System.Object.Equals - identisch System.Object.Equals true
- gleich System.Object.Equals.Value true
23Common Type SystemBeispiel 4 Delegates
Typisierte Funktionszeiger
24Common Type SystemAttribute
- Klassen und Methoden können über Attribute mit
Metadaten versehen werden - Der Wert eines Attributs kann zur Laufzeit
ausgelesen werden - Attribute werden durch Ableitungen von der Klasse
System.Attribute definiert - Konsequente Weiterentwicklung des
Attribut-Gedankens von COM - Aber COM Attribut ? CLR Attribut !!!
25Common Type SystemBeispiel 5 Attribute
26Bestandsaufnahme
- Die Common Language Runtime ermöglicht unabhängig
von Programmiersprachen eine durchgängig objekt-
und komponentenorientierte Programmierung - .NET Sprachen sollten sich auf die Typen
beschränken, die über das Common Type System
definiert sind
27Metadaten und ReflectionÃœbersetzen von Sourcen
Source Code
Typ A
Compiler (C, VB.NET, etc.)
Typ B
Typ C
28Metadaten und Reflection
- Ein Modul dient als Container für Typen
- Ein Modul enthält
- den IL-Code der Typen
- Beschreibung der Typen
- Die Beschreibung der Typen wird mit Metadaten
bezeichnet - Jedes Modul enthält Metadaten
- Compiler erstellt Metadaten on the fly
29Metadaten und Reflection
- Metadaten sind für alle Module auf die gleiche
Art und Weise aufgebaut - Einheitliches Format !!!
- Metadaten eines Moduls können zur Laufzeit
ausgelesen und geändert werden - Diesen Vorgang nennt man Reflection
- .NET Framework stellt entsprechende Klassen über
den Namespace System.Reflection bereit
30Metadaten und ReflectionBeispiel 6 Reflection
31Assemblies
- .NET Anwendungen bestehen aus Assemblies
- Assembly Komponente?
- Ein Assembly ist ein Container für Module
- Sämliche Sicherheits- und Versionsüberprüfungen
durch die CLR erfolgen auf der Basis von
Assemblies !!!
32AssembliesÃœbersetzen von Sourcen
Compiler (C, VB.NET, etc.)
33Assemblies
- Sobald ein Modul kompiliert ist, gehört es zu
einem Assembly - Compiler erstellt Assembly on the fly
- .NET Framework stellt entsprechende Klassen über
den Namespace System.Reflection.Emit bereit - Die im Modul vorhandenen Typen sind nur innerhalb
des Assemblies bekannt
34AssembliesContainer für mehrere Module
35AssembliesManifest
- Jedes Assembly enthält genau ein Manifest
- Das Manifest beschreibt das Assembly
- Keine Headerdateien
- Keine Typenbibliothek, o. ä.
36AssembliesManifest
- Das Manifest enthält
- Assembly-Identität
- Name Version Ländercode
- Liste der Module, aus denen das Assembly besteht
- Referenzierte Assemblies
- Exportierte Typen und Resourcen
- Attribute
37AssembliesKategorien
- Private Assembly
- Assembly kann nur von genau einer Anwendung
benutzt werden - Shared Assemby
- Assembly kann global von allen Anwendungen
benutzt werden
38AssembliesPrivate Assembly
- Identifikation anhand eines einfachen Namens,
z.B. Reverse - Keine Versionsüberprüfung
- Installation per Filecopy
- Standardmäßig befinden sich Assembly und
Anwendung im gleichen Verzeichnis - Verzeichnis kann per CFG-Datei definiert werden
39AssembliesBeispiel 7 Private Assembly
40AssembliesShared Assembly
- Identifikation über einen Strong Name
- Versionsüberprüfung durch die Runtime
- Installation im Global Assembly Cache(Ã SDK-Tool
al.exe oder gacutil.exe) - systemweiter Speicherbereich
- normale Dateien
- keine Registry-Einträge, o. ä.
41AssembliesShared Assembly - Strong Name
- Eindeutigkeit des Names wird mit Hilfe der
Public-Key-Verschlüsselung hergestellt - Strong Name Identität Public Key
- Attribut Originator im Manifest
42AssembliesSign-Verfahren für Shared Assemblies
- Keyfile erstellen (Ã SDK-Tool sn.exe k outf)
- Compiler mit Keyfile und Versionsnummer aufrufen
- Beim Erstellen des Assemblies wird der Public Key
im Manifest eingetragen - Nach dem Erstellen wird das Modul, in dem sich
das Manifest befindet, mit dem Private Key
signiert - Client, der das Assembly referenziert, erhält
beim Kompilieren den Public Key(Ã Attribut
Originator in seinem Manifest)
43AssembliesShared Assembly zur Laufzeit laden
- Client wird standardmäßig an die Version
gebunden, die in seinem Manifest eingetragen ist - Dieses Verhalten kann per CFG-Datei überschrieben
werden (à später)
44AssembliesBeispiel 8 Shared Assembly
45VersionierungAufbau der Versionsnummer
46VersionierungIncompatible
- Ein Shared Assembly ist grundsätzlich
inkompatibel zum Client, wenn sich die Major-
oder Minor-Version ändert - Beispiel neues Produktrelease
- Runtime wirft eine Type Load Exception
47VersionierungMaybe Compatible
- Ein Shared Assembly kann kompatibel zum Client
sein, wenn sich die Revision bei gleichbleibender
Major- und Minor-Version ändert - Beispiel Servicepack
- Runtime versucht, das Assembly mit der höchsten
Revisions- und Buildnummer zu laden
48VersionierungQFE Quick Fix Engineering
- Ein Shared Assembly ist grundsätzlich kompatibel
zum Client, wenn sich nur die Buildnummer ändert - In diesem Fall liegt ein sogenannterQuick Fix
Engineering (QFE) vor - Beispiel Security Hotfix
- Runtime versucht, das Assembly mit der höchsten
Revisions- und Buildnummer zu laden
49VersionierungBeispiel 9 Standardvorgaben
50VersionierungVorgaben per CFG-Datei definieren
51VersionierungVorgaben per CFG-Datei definieren
- Option BindingMode ltsafe normalgt
- safeRuntime versucht die Assembly-Version zu
laden, die im Client-Manifest eingetragen ist - normalRuntime versucht, die Assembly-Version mit
der höchsten Revision- und Buildnummer zu laden
52VersionierungVorgaben per CFG-Datei definieren
- Beispiel für die Option BindingMode
- Version 2.0.0.0 ist inkompatibel zu 2.0.1.0
- ohne neu zu kompilieren können Clients dennoch
die Version 2.0.0.0 benutzen
53VersionierungVorgaben per CFG-Datei definieren
- Option BindingRedir Client soll eine ganz
bestimmte Version eines Assemblies laden - NameName des Assemblies
- OriginatorPublic Key des Assemblies, um
Eindeutigkeit zu gewährleisten - VersionVersion, die nicht geladen werden
sollen(Ã ein Stern kennzeichnet alle Versionen) - VersionNew Version des Assemblies, das geladen
werden soll
54VersionierungVorgaben per CFG-Datei definieren
- Beispiel für die Option BindingRedir
- Version 2.0.0.0 wurde installiert, hat aber einen
Fehler - Die Version 1.0.0.0 funktionierte hingegen
reibungslos - ohne neu zu kompilieren können sämtliche Aufrufe
auf die Version 1.0.0.0 umgeleitet werden
55VersionierungBeispiel 10 Vorgaben per CFG-Datei
definieren
56Zusammenfassung
- Sprachübergreifende Integration und einheitliche
Fehlerbehandung über ein gemeinsames Typsystem - Unterschiedliche Versionen gleicher Komponenten
können parallel betrieben werden (à Ende der DLL
Hölle) - Deployment von Anwendungen wird einfacher (Ã
Filecopy, keine Registry)
57Fragen?
58Glossar
- IIS Internet Information Server Der Webserver
von Microsoft - CLR Common Language Runtime gemeinsame
Laufzeitumgebung für alle .NET Anwendungen. - CG Garbage Collection Sie sorgt dafür, das
Speicher, der von einem Programm angefordert und
benutzt wurde automatisch wieder freigegeben
wird. Vorsicht beim Programmieren Die GC
bestimmt, wann Speicher physikalisch freigegeben
wird. Deshalb sollten teure Resourcen - wie
bspw. Datenbankverbindungen - explizit innerhalb
einer eigens dafür geschriebenen Methode
entsorgt werden. Diese Methode sollte immer
dann aufgerufen werden, wenn die Resourcen
unmittelbar freigegeben werden sollen. - MSIL Microsoft Intermediate Language
- JIT Just in time
- Managed Code In der .NET Plattform wird kein
nativer Code mehr erzeugt. Stattdessen generieren
Compiler unter .NET eine Zwischensprache (MSIL),
die dann unter Aufsicht der CLR bei Bedarf (JIT)
in nativen Code übersetzt und ausgeführt wird.
Deshalb wird der von den Compilern erzeugte Code
auch Managed Code genannt. - CFG-Datei Jede .NET Anwendung kann mit
benutzerspezifischen Einstellungen versehen
werden. Diese Einstellungen können in einer
XML-Datei abgelegt sein, die sich im Verzeichnis
der Anwendung befinden muss. Die Datei muß
ausserdem die Endung CFG haben und den gleichen
Namen wie die Anwendung besitzen (z.B.
C\Test.EXE und C\Test.CFG).