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
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, .NET My Services)
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 Ngen (Native Image Generator)
Betriebssystem
10BasicsManaged Code
- Sämtlicher Code wird unter Aufsicht der Common
Language Runtime ausgeführt - Runtime führt Sicherheitsüberprüfungen aus
- Runtime übernimmt Speicherverwaltung und
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 - MSIL Microsoft Intermediate Language
- Sprachintegration erfolgt auf Ebene von MSIL
12BasicsCode wird kompiliert
- IL-Code wird vor der Ausführung immer (!) durch
Compiler in echten Maschinencode übersetzt - Unabhängigkeit von Hardwareplattformen
- für Windows CE gibt es das Compact Framework
13BasicsCode wird kompiliert
14JIT CompilerNgen.exe
- Erzeugt aus IL Code ein Native Executable
- Output ist abhängig von
- CPU Typ
- Betriebssystemversion
- Exakte Identität des Assemblies
- Exakte Identität aller referenzierten Assemblies
- Command-line Schaltern
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 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 !!!
24Common Type SystemBeispiel 4 Attribute
25Bestandsaufnahme
- 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
26Metadaten und ReflectionÜbersetzen von Sourcen
Source Code
Typ A
Compiler (C, VB.NET, etc.)
Typ B
Typ C
27Metadaten 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
28Metadaten 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
29Metadaten und ReflectionBeispiel 5 Reflection
30Assemblies
- .NET Anwendungen bestehen aus Assemblies
- Assembly Komponente?
- Ein Assembly ist ein Container für Module
- Sämtliche Sicherheits- und Versionsüberprüfungen
durch die CLR erfolgen auf der Basis von
Assemblies !!!
31AssembliesÜbersetzen von Sourcen
Compiler (C, VB.NET, etc.)
32Assemblies
- 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
33AssembliesContainer für mehrere Module
34AssembliesManifest
- Jedes Assembly enthält genau ein Manifest
- Das Manifest beschreibt das Assembly
- Keine Headerdateien
- Keine Typenbibliothek, o. ä.
35AssembliesManifest
- 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
36AssembliesKategorien
- Private Assembly
- Assembly kann nur von genau einer Anwendung
benutzt werden - Shared Assemby
- Assembly kann global von allen Anwendungen
benutzt werden
37AssembliesPrivate Assembly
- Identifikation anhand eines einfachen Namens,
z.B. Stringer - Keine Versionsüberprüfung
- Installation per Filecopy
- Standardmäßig befinden sich Assembly und
Anwendung im gleichen Verzeichnis - Verzeichnis kann per .config-Datei definiert
werden
38AssembliesBeispiel 6 Private Assembly
39AssembliesShared 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. ä.
40AssembliesShared Assembly - Strong Name
- Eindeutigkeit des Namens wird mit Hilfe der
Public-Key-Verschlüsselung hergestellt - Strong Name Identität Public Key
- Attribut Originator im Manifest
41AssembliesSign-Verfahren für Shared Assemblies
- Keyfile erstellen (à sn.exe k outf)
- Im Sourcecode des Shared Assemblies Attribut
assembly AssemblyKeyFile(ltoutfgt) angeben - Beim Kompilieren des Shared Assemblies wird der
Public Key im Manifest eingetragen - Client, der das Assembly referenziert, erhält
beim Kompilieren eien Hashwert d. Public Key(à
publickeytoken in seinem Manifest)
42AssembliesShared Assembly zur Laufzeit laden
- Client wird standardmäßig an die Version des
Shared Assemblies gebunden, die in seinem
Manifest eingetragen ist - Dieses Verhalten kann per .config-Datei
überschrieben werden (à später)
43AssembliesBeispiel 7 Shared Assembly
44VersionierungAufbau der Versionsnummer
45VersionisierungInkompatibel
- 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
46VersionisierungVielleicht kompatibel
- Ein Shared Assembly kann kompatibel zum Client
sein, wenn sich die Revision bei gleich
bleibender Major- und Minor-Version ändert - Beispiel Servicepack
- Runtime versucht, das Assembly mit der höchsten
Revisions- und Buildnummer zu laden
47VersionisierungQFE 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
48VersionierungVorgaben per .config-Datei
definieren
49VersionisierungVorgaben per .config-Datei
definieren
- Beispiel für die Option bindingRedirect
- 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
50VersionisierungVorgaben per .config-Datei
definieren
- Option bindingRedirect Client soll eine ganz
bestimmte Version eines Ass. laden - NameName des Assemblies
- OriginatorPublic Key des Assemblies, um
Eindeutigkeit zu gewährleisten - oldVersionVersion, die nicht geladen werden
sollen(à ein Stern kennzeichnet alle Versionen) - newVersionVersion des Assemblies, das geladen
werden soll
51VersionierungVorgaben per .config-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
52Zusammenfassung
- Sprachübergreifende Integration und einheitliche
Fehlerbehandlung ü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)
53Fragen?
54Glossar
- 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. - .config-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 muss
außerdem die Endung .config haben und den
gleichen Namen wie die Anwendung besitzen (z.B.
C\Test.exe und C\Test.exe.config).