Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group Microsoft GmbH

Ähnliche Präsentationen


Präsentation zum Thema: "Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group Microsoft GmbH"—  Präsentation transkript:

1 Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group Microsoft GmbH

2 Was Sie erwartet Eine kurzer Überblick in den Problemkreis Eine kurzer Überblick in den Problemkreis Die DLL-Hölle und ihre Ursachen Die DLL-Hölle und ihre Ursachen Eine Einführung in die.NET-Technologien für Deployment und Versioning Eine Einführung in die.NET-Technologien für Deployment und Versioning Konfiguration von Applikationen mit Hilfe von Policy Files Konfiguration von Applikationen mit Hilfe von Policy Files Komponenten mit integriertem Setup-Code Komponenten mit integriertem Setup-Code Microsoft Installer (MSI) Support Microsoft Installer (MSI) Support

3 Anforderungen [1/3] Unkompliziertes Deployment Unkompliziertes Deployment "XCopy"-Installation "XCopy"-Installation Einfaches physikalisches Verschieben von Applikationen Einfaches physikalisches Verschieben von Applikationen Verhinderung von "Nebenwirkungen" Verhinderung von "Nebenwirkungen" Neue Applikationen sollen bereits installierte Applikationen nicht negativ beeinflussen Neue Applikationen sollen bereits installierte Applikationen nicht negativ beeinflussen

4 Anforderungen [2/3] Management von Software-Service Management von Software-Service Wie können Bugfixes ausgeliefert werden? Wie können Bugfixes ausgeliefert werden? Was tun, wenn der Bugfix neue Bugs enthält? Was tun, wenn der Bugfix neue Bugs enthält? Was tun, wenn ein Bugfix für eine gemeinsame Komponente nur von einer Applikation genutzt werden soll? Was tun, wenn ein Bugfix für eine gemeinsame Komponente nur von einer Applikation genutzt werden soll?

5 Anforderungen [3/3] Einfache Installation von benötigten Ressourcen Einfache Installation von benötigten Ressourcen Erstellen von Datenbanken Erstellen von Datenbanken Setup von Message Queues Setup von Message Queues

6 Ein Beispielprojekt: "MyOffice.NET"

7 "MyOffice"-Komponenten MyText und MyCalc MyText und MyCalc "Textverarbeitung" und "Tabellenkalkulation" "Textverarbeitung" und "Tabellenkalkulation".NET WinForms-Applikationen (EXE).NET WinForms-Applikationen (EXE) MySpeller MySpeller "Rechtschreibprüfung" "Rechtschreibprüfung".NET Klassenbibliothek (DLL).NET Klassenbibliothek (DLL) Gemeinsam genutzte Komponente – wird von MyText und MyCalc referenziert Gemeinsam genutzte Komponente – wird von MyText und MyCalc referenziert

8 VS.NET: Assembly-Referenzen "Add Reference"-Dialog: Eintrag in der Registry nötig "Add Reference"-Dialog: Eintrag in der Registry nötig Siehe auch KB-Artikel Q Siehe auch KB-Artikel Q [HKEY_CURRENT_USER \SOFTWARE\Microsoft\.NETFramework\AssemblyFolders \ " [HKEY_CURRENT_USER \SOFTWARE\Microsoft\.NETFramework\AssemblyFolders \ "

9 Gemeinsame Systemkomponenten (Zentraler Speicherort) "MyOffice" - Abhängigkeiten System.Windows.Forms.DLL.NET Formularbibliothek System.Windows.Forms.DLL.NET Formularbibliothek System.Data.DLL.NET Datenzugriffs-Bibliothek System.Data.DLL.NET Datenzugriffs-Bibliothek MSCorLib.DLL.NET Basis-Datentypen MSCorLib.DLL.NET Basis-Datentypen Applikations- Komponenten (Lokaler Speicherort) MyText.EXE MySpeller.DLL MyCalc.EXE NEUE VERSION!

10 Die DLL-Hölle… Der Highlander-Effekt bei DLLs: Es kann nur eine(n) geben Der Highlander-Effekt bei DLLs: Es kann nur eine(n) geben Alle Clients müssen dieselbe DLL verwenden Alle Clients müssen dieselbe DLL verwenden Diese wird eventuell von einer anderen Applikation mit einer inkompatiblen Version überschrieben Diese wird eventuell von einer anderen Applikation mit einer inkompatiblen Version überschrieben Clients können keine private Kopie der DLL verwenden oder eine bestimmte Version anfordern Clients können keine private Kopie der DLL verwenden oder eine bestimmte Version anfordern

11 …und die.NET Runtime (CLR) Die CLR kann verschiedene Versionen einer gemeinsam genutzten Komponente gleichzeitig ausführen Die CLR kann verschiedene Versionen einer gemeinsam genutzten Komponente gleichzeitig ausführen Jede Client-Applikation kann individuell die gewünschte Version anfordern Jede Client-Applikation kann individuell die gewünschte Version anfordern Extensive Konfigurationsmöglichkeiten Extensive Konfigurationsmöglichkeiten Komponenten enthalten alle wichtigen Informationen über sich selbst Komponenten enthalten alle wichtigen Informationen über sich selbst Keine Eintragungen in der Registry mehr nötig Keine Eintragungen in der Registry mehr nötig

12 Inside "MySpeller" MySpeller.DLL MSIL Code (kompiliert) MSIL Code (kompiliert).method public static bool CheckSpelling(string DocumentString) cil managed { // Code size 40 (0x28).maxstack 3.locals init ([0] bool CheckSpelling) IL_000c: ldstr "HALLO" IL_0011: ldc.i4.0 IL_0012: call IL_0017: ldc.i4.0 IL_0025: nop IL_0026: ldloc.0 IL_0027: ret } // end of method MySpeller::CheckSpelling Metadaten Reference-Tabellen Was wird importiert? Definition-Tabellen Was wird exportiert? Jedes Modul enthält… Jedes Modul enthält… Metainformationen darüber, welche externen Typen, Methoden etc. von diesem Modul verwendet werden Metainformationen darüber, welche externen Typen, Methoden etc. von diesem Modul verwendet werden Metainformationen darüber, welche Typen, Methoden etc. von diesem Modul exportiert werden Metainformationen darüber, welche Typen, Methoden etc. von diesem Modul exportiert werden Optional: Ausführbaren Code (MSIL) Optional: Ausführbaren Code (MSIL) Imports System.IO Imports System.Data Imports Microsoft.Win32 Public Class MySpeller 'Simple "Rechtschreibprüfung", kann nur auf das Wort "HALLO" prüfen Public Shared Function CheckSpelling _ (ByVal DocumentString As String) As Boolean If DocumentString.ToUpper.Trim <> "HALLO" Then Return False Else Return True End If End Function

13 Assemblies "Logische" EXE oder DLL unter.NET "Logische" EXE oder DLL unter.NET Eine Assembly kann aus einem oder mehreren Files bestehen, ist aber nach außen eine logische Einheit Eine Assembly kann aus einem oder mehreren Files bestehen, ist aber nach außen eine logische Einheit Versionierung, Deployment und Security beziehen sich jeweils auf die Assembly als Ganzes Versionierung, Deployment und Security beziehen sich jeweils auf die Assembly als Ganzes Enthält ein Manifest, welches Auskunft über die Assembly gibt Enthält ein Manifest, welches Auskunft über die Assembly gibt

14 Single File Assembly MSIL Code (kompiliert) MSIL Code (kompiliert) MySpeller.DLL Assembly MySpeller Version X Jede Assembly enthält genau ein Manifest Jede Assembly enthält genau ein Manifest Auch bei Single File Assemblies Auch bei Single File Assemblies Jedes File der Assembly enthält Metadaten über seine eigenen Typen und Methoden Jedes File der Assembly enthält Metadaten über seine eigenen Typen und Methoden Metadaten Importe Manifest Exporte Files Exporte

15 Demo "MySpeller" im MSIIL Disassembler ILDasm.exe "MySpeller" im MSIIL Disassembler ILDasm.exe

16 Multi File Assembly MSIL Code (kompiliert) MSIL Code (kompiliert) Metadaten Importe Exporte Manifest Exporte Files MySpeller.DLL MSIL Code (kompiliert) MSIL Code (kompiliert) Metadaten Importe Exporte MySpellerTools.DLL MSIL Code (kompiliert) MSIL Code (kompiliert) Metadaten Importe Exporte MyGrammar.DLL Assembly MySpeller Version X …

17 Demo Erstellung einer Multi File Assembly Erstellung einer Multi File Assembly

18 Private und Public Assemblies Private Assemblies Private Assemblies Befinden sich im Applikationsverzeichnis oder einem Unterverzeichnis davon Befinden sich im Applikationsverzeichnis oder einem Unterverzeichnis davon Werden nur von einer Applikation genutzt Werden nur von einer Applikation genutzt Public Assemblies Public Assemblies Werden von einer oder mehreren Applikationen genutzt Werden von einer oder mehreren Applikationen genutzt Befinden sich an einem zentralen Ort, dem Global Assembly Cache (GAC) Befinden sich an einem zentralen Ort, dem Global Assembly Cache (GAC)

19 Der Global Assembly Cache Speicherort für Public Assemblies Speicherort für Public Assemblies Kann mehrere Versionen derselben Assembly aufnehmen Kann mehrere Versionen derselben Assembly aufnehmen Die CLR ist in der Lage, unterschiedlichen Applikationen verschiedene Versionen einer Assembly zu liefern und diese gleichzeitig im Speicher zu halten Die CLR ist in der Lage, unterschiedlichen Applikationen verschiedene Versionen einer Assembly zu liefern und diese gleichzeitig im Speicher zu halten

20 Identifizierung von Assemblies Assemblies im GAC müssen eindeutig identifizierbar sein Assemblies im GAC müssen eindeutig identifizierbar sein Was passiert, wenn es zwei verschiedene MySpeller-Bibliotheken gibt? Was passiert, wenn es zwei verschiedene MySpeller-Bibliotheken gibt? COM-Lösung: Eindeutige GUID? COM-Lösung: Eindeutige GUID?

21 Strong Names [1/3] Strong Names liefern Identität Strong Names liefern Identität Teile der Metainformation werden mit einem Private Key digital signiert Teile der Metainformation werden mit einem Private Key digital signiert Assemblies, welche die Public Assembly referenzieren, enthalten den entsprechenden Public Key Assemblies, welche die Public Assembly referenzieren, enthalten den entsprechenden Public Key Strong Names sind sicher Strong Names sind sicher Nur der Autor hat den Private Key und kann damit signieren Nur der Autor hat den Private Key und kann damit signieren Manipulationen werden verhindert Manipulationen werden verhindert

22 Strong Names [2/3] Private Key Public Key MSIL Code (kompiliert) MSIL Code (kompiliert) Metadaten Manifest Assembly MySpeller Hash-Wert RSA Signatur MySpeller.DLL.snk File +

23 Strong Names [3/3] Private Key Public Key MSIL Code (kompiliert) MSIL Code (kompiliert) Metadaten Manifest Assembly MySpeller Hash-Wert A RSA Signatur MySpeller.DLL.snk File + Hash-Wert B A=B ? RSA Signatur

24 Demo Der Global Assembly Cache (GAC) Der Global Assembly Cache (GAC)

25 .NET Deployment: Grundregel Verwenden Sie möglichst wenige Shared Assemblies! Verwenden Sie möglichst wenige Shared Assemblies! Alle Private Assemblies, auf die Ihre Applikation verweist, können im Applikationsverzeichnis bzw. Unterverzeichnissen davon "leben" Alle Private Assemblies, auf die Ihre Applikation verweist, können im Applikationsverzeichnis bzw. Unterverzeichnissen davon "leben" Die gesamte Applikation kann so per "XCopy" an eine andere Stelle kopiert werden Die gesamte Applikation kann so per "XCopy" an eine andere Stelle kopiert werden Eine solche Applikation läuft beispielsweise auch direkt von CD! Eine solche Applikation läuft beispielsweise auch direkt von CD!

26 Shared Assemblies Shared Assemblies sind trotzdem unvermeidbar Shared Assemblies sind trotzdem unvermeidbar Systembibliotheken, Datenzugriffsbibliotheken uvm. Systembibliotheken, Datenzugriffsbibliotheken uvm. Änderungen an Shared Assemblies beeinflussen potentiell viele Applikationen (wie "einst" unter COM! ;-) Änderungen an Shared Assemblies beeinflussen potentiell viele Applikationen (wie "einst" unter COM! ;-) Bei negativen Auswirkungen auf einzelne Applikationen kann selektiv durch Konfigurationsfiles eingegriffen werden! Bei negativen Auswirkungen auf einzelne Applikationen kann selektiv durch Konfigurationsfiles eingegriffen werden!

27 Konfigurationsfiles [1/2] "Human-readable" XML-Files "Human-readable" XML-Files Bestimmen die Regeln für die Suche nach der richtigen Assembly ("Assembly Binding") Bestimmen die Regeln für die Suche nach der richtigen Assembly ("Assembly Binding") Wo suchen? Wo suchen? Welche Version verwenden? Welche Version verwenden?

28 Konfigurationsfiles [2/2] Application Configuration Files Application Configuration Files Bestimmen für jede Applikation einzeln, wie und wo nach Assemblies gesucht wird Bestimmen für jede Applikation einzeln, wie und wo nach Assemblies gesucht wird Publisher Configuration Files Publisher Configuration Files Leiten Aufrufe an einzelne Shared Assemblies auf neuere Versionen um (bei Bugfixes) Leiten Aufrufe an einzelne Shared Assemblies auf neuere Versionen um (bei Bugfixes) Machine Configuration Files Machine Configuration Files Gelten global für den gesamten Computer Gelten global für den gesamten Computer Überschreiben Application Configuration Überschreiben Application Configuration

29 Konfigurationsfiles editieren Per Hand mit Notepad Per Hand mit Notepad Mit PlugIns der Management-Konsole Mit PlugIns der Management-Konsole Windows XP: Systemsteuerung Verwaltung.NET Framework Konfiguration Windows XP: Systemsteuerung Verwaltung.NET Framework Konfiguration

30 Deployment Szenario 1 Einfaches XCopy Deployment Einfaches XCopy Deployment Alle Files von MyOffice sollen in ein Applikationsverzeichnis Alle Files von MyOffice sollen in ein Applikationsverzeichnis

31 Deployment Szenario 1 Global Assembly Cache C:\WINNT\ASSEMBLY Applikationsverzeichnis C:\PROGRAMME\MYOFFICE C:\PROGRAMME\MYOFFICE\TOOLS MyCalc.EXE MySpeller.DLL MyText.EXE XCOPY

32 Demo Deployment von MyOffice per XCopy Deployment von MyOffice per XCopy

33 Deployment Szenario 2 Verschieben von Komponenten in Unterverzeichnisse Verschieben von Komponenten in Unterverzeichnisse MySpeller soll in das Unterverzeichnis \Tools unterhalb des Applikations- verzeichnis verschoben werden MySpeller soll in das Unterverzeichnis \Tools unterhalb des Applikations- verzeichnis verschoben werden Dieser Pfad muß im Application Configuration File eingetragen werden Dieser Pfad muß im Application Configuration File eingetragen werden

34 Deployment Szenario 2 Global Assembly Cache C:\WINNT\ASSEMBLY Applikationsverzeichnis C:\PROGRAMME\MYOFFICE C:\PROGRAMME\MYOFFICE\TOOLS MyCalc.EXE MyText.EXE.config MyText.EXE MySpeller.DLL Wo ist MySpeller?

35 Demo Verschieben der Komponente MySpeller Verschieben der Komponente MySpeller

36 Deployment Szenario 3 "MySpeller" soll eine Shared Assembly werden "MySpeller" soll eine Shared Assembly werden MySpeller muß einen StrongName bekommen MySpeller muß einen StrongName bekommen MySpeller.DLL muß in den GAC kopiert werden (Tool: GACUtil.EXE oder VS) MySpeller.DLL muß in den GAC kopiert werden (Tool: GACUtil.EXE oder VS) Die Runtime lädt jetzt MySpeller aus dem GAC, und nicht mehr aus dem Applikationsverzeichnis Die Runtime lädt jetzt MySpeller aus dem GAC, und nicht mehr aus dem Applikationsverzeichnis

37 Deployment Szenario 3 Global Assembly Cache C:\WINNT\ASSEMBLY Applikationsverzeichnis C:\PROGRAMME\MYOFFICE C:\PROGRAMME\MYOFFICE\TOOLS MyCalc.EXE MyText.EXE.config MyText.EXE MySpeller.DLL Wo ist MySpeller?

38 Demo Signieren von MySpeller und Installation im Global Assembly Cache Signieren von MySpeller und Installation im Global Assembly Cache

39 Deployment Szenario 4 [1/2] Ein neue Version von MySpeller ist verfügbar Ein neue Version von MySpeller ist verfügbar Alle Applikationen, die MySpeller verwenden, sollen mit der neuen Version arbeiten Alle Applikationen, die MySpeller verwenden, sollen mit der neuen Version arbeiten Ein Publisher Policy File kann die Aufrufe der alten Version an die neue Version "umleiten" Ein Publisher Policy File kann die Aufrufe der alten Version an die neue Version "umleiten"

40 Deployment Szenario 4 Global Assembly Cache C:\WINNT\ASSEMBLY Applikationsverzeichnis C:\PROGRAMME\MYOFFICE C:\PROGRAMME\MYOFFICE\TOOLS MyCalc.EXE MyText.EXE.config MyText.EXE MySpeller.DLL Version 1.0 MySpeller.DLL Version 1.0 policy.1.0. MySpeller.DLL MySpeller.DLL Version 1.5 MySpeller.DLL Version 1.5

41 Demo Deployment der neuen Version von MySpeller und Konfiguration der Client-Applikationen Deployment der neuen Version von MySpeller und Konfiguration der Client-Applikationen

42 Deployment Szenario 4 [2/2] Moment mal… einige Applikationen haben Probleme mit dieser neuen Version! Moment mal… einige Applikationen haben Probleme mit dieser neuen Version! Einzelne Applikationen können in ihrem Application Configuration File bestimmen, daß die vorherige Version verwendet wird ("Safe Mode") Einzelne Applikationen können in ihrem Application Configuration File bestimmen, daß die vorherige Version verwendet wird ("Safe Mode")

43 Deployment Szenario 4 Global Assembly Cache C:\WINNT\ASSEMBLY Applikationsverzeichnis C:\PROGRAMME\MYOFFICE C:\PROGRAMME\MYOFFICE\TOOLS MyCalc.EXE MyText.EXE.config MyText.EXE MySpeller.DLL Version 1.0 MySpeller.DLL Version 1.0 policy.1.0. MySpeller.DLL MySpeller.DLL Version 1.5 MySpeller.DLL Version 1.5

44 Demo MyCalc zur Verwendung der vorherigen Version von MySpeller zwingen MyCalc zur Verwendung der vorherigen Version von MySpeller zwingen

45 Komponenten mit integrierter Setup-Routine Manche Komponenten funktionieren nicht standalone, sondern erfordern Konfiguration der Umgebung Manche Komponenten funktionieren nicht standalone, sondern erfordern Konfiguration der Umgebung Erstellen von Datenbanken Erstellen von Datenbanken Setup von Message Queues Setup von Message Queues Komponenten können selbst Code enthalten, der bei ihrer (De-)Installation ausgeführt wird Komponenten können selbst Code enthalten, der bei ihrer (De-)Installation ausgeführt wird

46 Die Custom Installer-Klasse Eine Custom Installer-Klasse innerhalb der Komponente erbt von System.Configuration.Install.Installer Eine Custom Installer-Klasse innerhalb der Komponente erbt von System.Configuration.Install.Installer Überschreibt entsprechende Methoden, um bei der Installation Aktionen auszuführen Überschreibt entsprechende Methoden, um bei der Installation Aktionen auszuführen Install Install UnInstall UnInstall Rollback Rollback

47 Aufruf der Custom Installer -Methoden Komandozeilen-Tool InstalUtil.exe Komandozeilen-Tool InstalUtil.exe Custom Action innerhalb einer Microsoft Installer Package (MSI-Datei) Custom Action innerhalb einer Microsoft Installer Package (MSI-Datei)

48 Demo MySpeller-Datenbank über InstallUtil.exe installieren MySpeller-Datenbank über InstallUtil.exe installieren

49 Setup-Projekte mit VS.NET Visual Studio. NET bietet gute Unterstützung der MSI-Technologie Visual Studio. NET bietet gute Unterstützung der MSI-Technologie Projekttyp Setup Project Projekttyp Setup Project Wizard hilft bei der Erstellung Wizard hilft bei der Erstellung.NET-Deployment Features sind integriert.NET-Deployment Features sind integriert Installation von Shared Assemblies in den Global Assembly Cache Installation von Shared Assemblies in den Global Assembly Cache Aufruf von CustomInstaller-Methoden durch Custom Actions Aufruf von CustomInstaller-Methoden durch Custom Actions

50 Vorteile der MSI-Technologie Transaktionsbasierte Installation Transaktionsbasierte Installation Alles oder nichts Alles oder nichts Saubere Deinstallation Saubere Deinstallation Logging Logging Unterstützung von Installationsmodi Unterstützung von Installationsmodi Vollständig, Typisch, Benutzerdefiniert Vollständig, Typisch, Benutzerdefiniert Dritthersteller-Tool (InstallShield, WISE) wird benötigt Dritthersteller-Tool (InstallShield, WISE) wird benötigt Konfigurierbare Benutzeroberfläche Konfigurierbare Benutzeroberfläche

51 Demo MSI-Paket für MyOffice mit Visual Studio.NET erstellen MSI-Paket für MyOffice mit Visual Studio.NET erstellen

52 Deployment der Runtime [1/2] Windows.NET Server enthält als erstes Betriebssystem die.NET Runtime Windows.NET Server enthält als erstes Betriebssystem die.NET Runtime Für alle anderen Systeme ab Windows 98 kann die.NET Runtime separat installiert werden Für alle anderen Systeme ab Windows 98 kann die.NET Runtime separat installiert werden

53 Deployment der Runtime [2/2] Standalone Executable: DotNetFx.EXE Standalone Executable: DotNetFx.EXE Ca. 21 MB groß, installiert komplette Runtime Ca. 21 MB groß, installiert komplette Runtime DotNetFx.EXE kann per Bootstrapper installiert werden (silent mode) DotNetFx.EXE kann per Bootstrapper installiert werden (silent mode) Siehe us/dnnetdep/html/vsredistdeploy.asp Siehe us/dnnetdep/html/vsredistdeploy.asp us/dnnetdep/html/vsredistdeploy.asp us/dnnetdep/html/vsredistdeploy.asp

54 Vielen Dank! Fragen kostet nichts… Fragen kostet nichts…


Herunterladen ppt "Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group Microsoft GmbH"

Ähnliche Präsentationen


Google-Anzeigen