1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

53
1 oftwareentwicklung mit .NE eil 1 as ist .NET? ie .NET Common Language Runtime r. Ralph Zeller

Transcript of 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

Page 1: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

1

Softwareentwicklung mit .NETTeil 1

Was ist .NET?Die .NET Common Language Runtime

Dr. Ralph Zeller

Page 2: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

2

Was 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.

Page 3: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

3

Benutzer-Benutzer-sichtsicht

Web Web ServicesServices

PCs undPCs undSmartSmartDevicesDevices

InfrastrukturInfrastruktur

IdentityIdentityNotificationNotification

Appl

icat

ion

Appl

icat

ion

Cent

er 2

000

Cent

er 2

000

BizT

alk

BizT

alk

Serv

er 2

000

Serv

er 2

000

Com

mer

ce

Com

mer

ce

Serv

er 2

000

Serv

er 2

000

Exch

ange

Ex

chan

ge

2000

2000

SQL

Serv

er

SQL

Serv

er

2000

2000

ISA

Serv

er

ISA

Serv

er

2000

2000

Mobi

le

Mobi

le

Info

rmat

ion

Info

rmat

ion

2001

Ser

ver

2001

Ser

ver

Host

Ho

st

Inte

grat

ion

Inte

grat

ion

Serv

er 2

000

Serv

er 2

000

Enterprise ServersEnterprise Servers

VisualStudio.NETVisualStudio.NET.NET Framework.NET Framework

EntwicklerEntwicklerToolsTools

Was gehört zu .NET?

Page 4: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

4

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)

.NET DesignWeb Services

Page 5: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

5

.NET Plattform

Infrastruktur

Framework & Tools

Building Block Services

Common Language RuntimeEinheitliche KlassenbibliothekVisual Studio.NET

Ständig verfügbare Internet-Dienste(Code-Updates, Suchdienste, Messenger, .NET My Services)

Heutige „2000-Produktfamilie“(zukünftig .NET Enterprise Servers)

Devices Mobile Geräte, auf denen .NET Anwendungenlaufen (Handy, Handheld)

Page 6: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

6

Class-LoaderClass-LoaderRemotingRemoting

KontextKontextConcurrencyConcurrency

TransaktionenTransaktionen

Sprach-Sprach-integrationintegration

Warum eine Runtime?Einheitliches Integrationsmodell

COM Runtime(OLE32.DLL)

Microsoft Transaction

Server(MTXEX.DLL)

Layer(VBRUNxx.DLL)(MSVCRT.DLL)

COM+ Runtime(OLE32.DLL)

Layer(VBRUNxx.DLL)(MSVCRT.DLL)

Common Language Runtime

(MSCOREE.DLL)(MSCORLIB.DLL)

Page 7: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

7

.NET Framework

ASPVB Forms MFC & ATL

Windows API

Warum ein Framework?Einheitliches Programmiermodell

Page 8: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

8

System

System.Data System.Xml

System.Web

GlobalizationDiagnosticsConfigurationCollections

ResourcesReflectionNetIO

ThreadingTextServiceProcessSecurity

DesignADO

SQLTypesSQL

XPathXSLT

RuntimeInteropServicesRemotingSerialization

Serialization

Configuration SessionStateCaching Security

ServicesDescriptionDiscoveryProtocols

UIHtmlControlsWebControls

System.Drawing

ImagingDrawing2D

TextPrinting

System.WinFormsDesign ComponentModel

Das .NET Framework

Page 9: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

9

VB

Compiler ASM Code

ÜbersichtC#

Compiler

IL Code

C++

Compiler

JIT Compiler Ngen(Native Image Generator)

Common Language Runtime

Betriebssystem

Page 10: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

10

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

BasicsManaged Code

Page 11: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

11

Compiler erzeugen keinen native Code sondern eine prozessorunabhängige Zwischensprache• MSIL – Microsoft Intermediate Language• Sprachintegration erfolgt auf Ebene von

MSIL

BasicsMicrosoft Intermediate Language

Page 12: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

12

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

BasicsCode wird kompiliert

Page 13: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

13

JIT Compiler

Klasse A

Methode 1 (ASM)

Methode 2 (IL)

Methode 3 (IL)

Methode 4 (IL)

Klasse B

Methode 1 (IL)

Methode 2 (IL)

(1) Methodenaufruf

(2) IL-Codedurch native

Code ersetzen

Methode 1 (ASM)

BasicsCode wird kompiliert

Page 14: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

14

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

JIT CompilerNgen.exe

Page 15: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

15

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

BasicsCommon Type System

Page 16: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

16

MSIL unterscheidet sich von „reinen“ Assemblersprachen• komplexe Datentypen und Objekte sind

fester Bestandteil• Konzepte wie Vererbung und Polymorphie

werden von vornherein unterstützt

BasicsImplikationen

Page 17: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

17

BasicsBeispiel 1: „Hello World“ unter .NET

Page 18: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

18

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 per„Definition“ interoperabel

BasicsImplikationen

Page 19: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

19

Basics Beispiel 2: Integration auf Codeebene

Page 20: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

20

Object Value Type

Enum

Type

String

Array

Exception

Boolean

Byte

Char

Currency

DateTime

Decimal

Double

Guid

Int16

Int32

Int64

SByte

Single

TimeSpan

TypedRef.

UInt16

UInt32

UInt64

Void

Delegate

Typen imNamespaceSystem

Common Type SystemDas Objektmodell

Page 21: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

21

Common Type SystemBeispiel 3: Boxing und Unboxing

Page 22: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

22

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

Common Type SystemGleichheit und Identität von Objekten

Page 23: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

23

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 !!!

Common Type SystemAttribute

Page 24: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

24

Common Type SystemBeispiel 4: Attribute

Page 25: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

25

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

Bestandsaufnahme

Page 26: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

26

Compiler

(C#, VB.NET, etc.)

Typ A {…}

Source Code

Typ B {…}

Typ C {…}

Metadaten für die Typen A, B und C

MSIL-Code für Typ A

MSIL-Code für Typ B

MSIL-Code für Typ C

Modul

Metadaten und ReflectionÜbersetzen von Sourcen

Page 27: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

27

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“

Metadaten und Reflection

Page 28: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

28

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

Metadaten und Reflection

Page 29: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

29

Metadaten und ReflectionBeispiel 5: Reflection

Page 30: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

30

Assemblies

.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 !!!

Page 31: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

31

Compiler

(C#, VB.NET, etc.)

Typ A {…}

Source Code

Typ B {…}

Typ C {…}

Metadaten für die Typen A, B und C

MSIL-Code für Typ A

MSIL-Code für Typ B

MSIL-Code für Typ C

Modul

(app1.vb)

Manifest

Assembly (app1.dll)

AssembliesÜbersetzen von Sourcen

Page 32: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

32

Assemblies

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

Page 33: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

33

Metadaten für D und E

Modul 1 (app2.dll)

Manifest

Assembly (app1.dll)

MSIL-Code für Typ D

MSIL-Code für Typ E

Metadaten für F und G

Modul 2 (app3.dll)MSIL-Code für Typ F

MSIL-Code für Typ G

AssembliesContainer für mehrere Module

Page 34: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

34

Jedes Assembly enthält genau ein Manifest

Das Manifest beschreibt das Assembly• Keine Headerdateien• Keine Typenbibliothek, o. ä.

AssembliesManifest

Page 35: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

35

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

AssembliesManifest

Page 36: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

36

Private Assembly• Assembly kann nur von genau einer

Anwendung benutzt werden Shared Assemby• Assembly kann global von allen

Anwendungen benutzt werden

AssembliesKategorien

Page 37: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

37

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

AssembliesPrivate Assembly

Page 38: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

38

AssembliesBeispiel 6: Private Assembly

Page 39: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

39

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. ä.

AssembliesShared Assembly

Page 40: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

40

Eindeutigkeit des Namens wird mit Hilfe der Public-Key-Verschlüsselung hergestellt• Strong Name = Identität + Public Key• Attribut Originator im Manifest

AssembliesShared Assembly - Strong Name

Page 41: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

41

1. Keyfile erstellen ( sn.exe –k outf)

2. Im Sourcecode des Shared Assemblies Attribut [assembly: AssemblyKeyFile(<outf>)] angeben

3. Beim Kompilieren des Shared Assemblies wird der Public Key im Manifest eingetragen

4. Client, der das Assembly referenziert, erhält beim Kompilieren eien Hashwert d. Public Key( publickeytoken in seinem Manifest)

AssembliesSign-Verfahren für Shared Assemblies

Page 42: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

42

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)

AssembliesShared Assembly zur Laufzeit laden

Page 43: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

43

AssembliesBeispiel 7: Shared Assembly

Page 44: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

44

VersionierungAufbau der Versionsnummer

Page 45: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

45

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

VersionisierungInkompatibel

Page 46: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

46

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

VersionisierungVielleicht kompatibel

Page 47: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

47

Ein Shared Assembly ist grundsätzlich kompatibel zum Client, wenn sich nur die Buildnummer ändert• In diesem Fall liegt ein sogenannter

Quick Fix Engineering (QFE) vor• Beispiel: Security Hotfix• Runtime versucht, das Assembly mit der

höchsten Revisions- und Buildnummer zu laden

VersionisierungQFE – Quick Fix Engineering

Page 48: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

48

<configuration> <startup> <requiredRuntime version="v1.0.0.0" safemode="true"/> </startup></configuration> <?xml version ="1.0"?>

<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Reverser" publicKeyToken="2c47419262627255"/> <bindingRedirect oldVersion=„1.0.0.0" newVersion=„2.0.0.0"/> </dependentAssembly> <probing privatePath="Reverse;String"/> </assemblyBinding> </runtime></configuration>

VersionierungVorgaben per .config-Datei definieren

Page 49: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

49

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

VersionisierungVorgaben per .config-Datei definieren

Page 50: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

50

Option bindingRedirect – Client soll eine ganz bestimmte Version eines Ass. laden• Name

Name des Assemblies• Originator

Public 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

VersionisierungVorgaben per .config-Datei definieren

Page 51: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

51

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

VersionierungVorgaben per .config-Datei definieren

Page 52: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

52

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)

Zusammenfassung

Page 53: 1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller.

53

Fragen?

Uff...