Einführung in Microsoft.NET Martin Saternus Martin Saternus Technical Student Consultant Microsoft Academic Program Microsoft Deutschland GmbH i-martsa@microsoft.com
In diesem Vortrag Der Weg zu Microsoft.NET Common Language Runtime (CLR) Base Class Library (BCL) Deklarative Programmierung mit.net
Vision Software als Service Unterstützung tzung von Smart Devices offene Standards als Grundlage Partner Web Services Internet + XML Microsoft Web Services andere Web Services Clients Ihr Unternehmen.com Geschäftslogik der Applikation Datenzugriff und -speicherung andere Applikationen
Entwicklungsparadigmen (1/2) Vereinfachung von Development und Deployment Selbstbeschreibende Komponenten Hierarchische Namespaces Einheitliches Objektmodell Strukturierte Exceptions Gemeinsames Root Object Common Type System (CTS) Einheitliche Vererbungs- und Typdefinitionen
Entwicklungsparadigmen (2/2) Robuste und sichere Ausführungsumgebung Code Access Security Sicherheit basiert auf der Identität t des Codes Administrativ über Richtlinien konfigurierbar ASP.NET: Integrierte Benutzer-Authentifizierung Windows identity,, Passport, forms-based based, Kryptographie Bibliothek für f r XML Deployment und Management Side-by by-side Ausführungen Verschiedene Versionen derselben Komponente können auf einem System nebeneinander existieren
.NET Framework VB C++ C# JScript J# Common Language Specification ASP.NET Web Forms Web Services Mobile Internet Toolkit ADO.NET and XML Base Class Library Windows Forms Visual Studio.NET Common Language Runtime Operating System
Common Language Runtime Base Class Library Support Thread Support Type Checker Security Engine COM Marshaler Exception Manager Debug Engine MSIL to Native Compilers (JIT) Code Manager Garbage Collector (GC) Class Loader
Die CLR Jeder Win32-Prozess, der die CLR benutzen möchte, muss diese laden Multi-Instance Instance-Singleton genau eine CLR pro Win32 Prozess Viele Instanzen von CorRuntimeHost Alle Instanzen greifen auf gemeinsame Daten zu Die Execution Engine der CLR ist in Form einer COM-DLL implementiert CorRunTimeHost
Ausführen einer EXE-Datei Eine Instanz der CLR wird erzeugt CLR erzeugt eine Appdomain EXE Datei implementiert einen Stub aus der MSCOREE.DLL IL-Code wird durch den JIT Compiler in nativen Code übersetzt Assembly der EXE-Datei wird in die AppDomain geladen Die CLR sucht nach der statischen Methode Main und führt f diese aus ggf. wird eine Exception geworfen
Übersetzen von Sourcen Source Code (app1.vb) Typ A { } Typ B { } Compiler (C#, VB.NET, etc.) Typ C { } Assembly (app1.dll) Modul Manifest MSIL-Code für Typ A MSIL-Code für Typ B MSIL-Code für Typ C Metadaten für die Typen A, B und C
Kategorien (laut Doku) Private Assembly Assembly kann nur von genau einer Anwendung benutzt werden Shared Assemby Assembly kann global von allen Anwendungen benutzt werden
Private Assembly Identifikation anhand eines einfachen Namens, z.b. Reverse Keine Versionsüberpr berprüfung Installation per Filecopy Standardmäß äßig befinden sich Assembly und Anwendung im gleichen Verzeichnis Verzeichnis kann per CFG-Datei definiert werden
Shared Assembly Identifikation über einen Strong Name Eindeutig per Public-Key Key-Verschlüsselungsselung Strong Name = Identität + Public Key Versionsüberpr berprüfung durch die Runtime Installation im Global Assembly Cache ( SDK-Tool gacutil.exe) systemweiter Speicherbereich basiert auf dem Filesystem, normale Dateien keine Registry-Eintr Einträge
Strong Name & Codesigning Strong Name garantiert Codeintegrität Unbemerktes Einschleusen von modifiziertem Code wird verhindert Aber: Auch böse b Menschen arbeiten mit Strong Names Code-Signing garantiert Codeindentität Code ist aufgrund seines X.509-Zertifikats eindeutig identifizierbar
Assemblies
Kategorien in der Praxis Private Assemblies Alle Assemblies,, die im nicht-produktiven Betrieb eingesetzt werden Published Assemblies Alle Assemblies,, die im produktiven Betrieb eingesetzt werden Diese Assemblies sollten grundsätzlich mit einem Strong Name versehen werden Shared Assemblies setzen einen Strong Name voraus!
Zwischenstation... Assemblies dienen zur physikalischen Organisation von Code Flexibles Gruppieren von Modulen Mobiler Code Shared Assemblies benutzen keine Registry Setzen Sie bei allen Assemblies,, die Sie ausliefern Strong Names ein! Nach Möglichkeit M sollten Sie auch Codesigning einsetzen
Framework, Languages und Tools VB C++ C# JScript J# Common Language Specification ASP.NET Web Forms Web Services Mobile Internet Toolkit ADO.NET and XML Base Class Library Windows Forms Visual Studio.NET Common Language Runtime Operating System
Einheitliches Programmier Model Gleiche API ungeachtet der Sprache und des Models.NET Framework VB Forms MFC/ATL ASP Windows API
Wieviel einfacher? Windows API HWND hwndmain = CreateWindowEx( 0, "MainWClass" MainWClass", "Main Window", WS_OVERLAPPEDWINDOW WS_HSCROLL WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, hinstance,, NULL); ShowWindow(hwndMain,, SW_SHOWDEFAULT); UpdateWindow(hwndMain);.NET Framework Form form = new Form() form.text = "Main Window" form.show()
System System System.Data System.Data System.Xml System.Xml System.Web System.Web Globalization Globalization Diagnostics Diagnostics Configuration Configuration Collections Collections Resources Resources Reflection Reflection Net Net IO IO Threading Threading Text Text ServiceProcess ServiceProcess Security Security Common Common OleDb OleDb SQLTypes SQLTypes SqlClient SqlClient XPath XPath XSLT XSLT Runtime Runtime InteropServices InteropServices Remoting Remoting Serialization Serialization Serialization Serialization Configuration Configuration SessionState SessionState Caching Caching Security Security Services Services Description Description Discovery Discovery Protocols Protocols UI UI HtmlControls HtmlControls WebControls WebControls System.Drawing System.Drawing Imaging Imaging Drawing2D Drawing2D Text Text Printing Printing System.Windows.Forms System.Windows.Forms Design Design ComponentModel ComponentModel Klassenbibliothek Klassenbibliothek
Metadaten - Reflection System.Type Felder public class Person { public string firstname; public string lastname; Methoden... } public bool Save() { System.Type t = this.gettype(); foreach(fieldinfo f in t.getfields()) {... } } Person p = new Person( Martin", Saternus"); p Person Martin Saternus
typeof() vs. GetType() Alle Typinformationen können k über einen Typ Type besorgt werden. GetType liefert Typ zur Laufzeit Auflösung über Name Type t = Type.GetType( System.Int32 System.Int32 ) typeof liefert Typ zur Compilezeit Auflösung über type token Type t = typeof(system.int32) In VB.NET TypeOf
Attribute Klassen und Methoden können k über Attribute mit Metadaten versehen werden Deklarative Definition von Objektverhalten (?) Attribute sind Klassen Einheitliche Vorgehensweise erleichtert die Definition eigener Attribute Attribute können k an Typen und Member angehängt werden Auch Attribute können k per Reflection ausgelesen werden
Definieren von Attributen Attribute werden über Klassen definiert, die von System.Attribute abgeleitet sind Klasse wird nur bei Bedarf instanziert C# Syntax für f r Attribute Attribute werden einem Subjekt mit eckigen Klammern vorangestellt Mehrere Attribute werden durch ein Komma voneinander getrennt Der Geltungsbereich von Attributen wird über ein eigenes Attribut definiert System.AttributeUsageAttribute
Attribute
Fragen!? Uff...