Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Suse Schlotman Geändert vor über 11 Jahren
1
Deployment und Versioning von .NET Applikationen
MSDN TechTalk – Mai 2002 Deployment und Versioning von .NET Applikationen 1 Deployment und Versioning von .NET Applikationen Uwe Baumann Technologieberater Developer Group Microsoft GmbH
2
Was Sie erwartet Eine kurzer Überblick in den Problemkreis
Die „DLL-Hölle“ und ihre Ursachen Eine Einführung in die .NET-Technologien für Deployment und Versioning Konfiguration von Applikationen mit Hilfe von Policy Files Komponenten mit integriertem Setup-Code Microsoft Installer (MSI) Support
3
Anforderungen [1/3] Unkompliziertes Deployment
"XCopy"-Installation Einfaches physikalisches Verschieben von Applikationen Verhinderung von "Nebenwirkungen" Neue Applikationen sollen bereits installierte Applikationen nicht negativ beeinflussen
4
Anforderungen [2/3] Management von Software-Service
Wie können Bugfixes ausgeliefert werden? 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?
5
Anforderungen [3/3] Einfache Installation von benötigten Ressourcen
Erstellen von Datenbanken Setup von Message Queues
6
Ein Beispielprojekt: "MyOffice .NET"
7
"MyOffice"-Komponenten
MyText und MyCalc "Textverarbeitung" und "Tabellenkalkulation" .NET WinForms-Applikationen (EXE) MySpeller "Rechtschreibprüfung" .NET Klassenbibliothek (DLL) Gemeinsam genutzte Komponente – wird von MyText und MyCalc referenziert
8
VS.NET: Assembly-Referenzen
"Add Reference"-Dialog: Eintrag in der Registry nötig Siehe auch KB-Artikel Q306149 [HKEY_CURRENT_USER \SOFTWARE\Microsoft\.NETFramework\AssemblyFolders \<MyAssemblies>] @="C:\\<MyAssemblies>"
9
"MyOffice" - Abhängigkeiten
Applikations-Komponenten (Lokaler Speicherort) Gemeinsame Systemkomponenten (Zentraler Speicherort) MyCalc.EXE System.Windows.Forms.DLL .NET Formularbibliothek NEUE VERSION! MyText.EXE MSCorLib.DLL .NET Basis-Datentypen NEUE VERSION! MySpeller.DLL System.Data.DLL .NET Datenzugriffs-Bibliothek
10
Die „DLL-Hölle“… Der „Highlander-Effekt“ bei DLLs: „Es kann nur eine(n) geben“ Alle Clients müssen dieselbe DLL verwenden 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
11
…und die .NET Runtime (CLR)
Die CLR kann verschiedene Versionen einer gemeinsam genutzten Komponente gleichzeitig ausführen Jede Client-Applikation kann individuell die gewünschte Version anfordern Extensive Konfigurationsmöglichkeiten Komponenten enthalten alle wichtigen Informationen über sich selbst Keine Eintragungen in der Registry mehr nötig
12
Inside "MySpeller" Jedes Modul enthält…
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 Metadaten Reference-Tabellen Was wird importiert? Definition-Tabellen Was wird exportiert? Jedes Modul enthält… 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 Optional: Ausführbaren Code (MSIL) MSIL Code (kompiliert) .method public static bool CheckSpelling(string DocumentString) cil managed { // Code size (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 MySpeller.DLL
13
Assemblies "Logische" EXE oder DLL unter .NET
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 Enthält ein Manifest, welches Auskunft über die Assembly gibt
14
Assembly MySpeller Version X
Single File Assembly Jede Assembly enthält genau ein Manifest Auch bei Single File Assemblies Jedes File der Assembly enthält Metadaten über seine eigenen Typen und Methoden Metadaten Importe Manifest Exporte Files Exporte MSIL Code (kompiliert) MySpeller.DLL Assembly MySpeller Version X
15
Demo "MySpeller" im MSIIL Disassembler ILDasm.exe
16
Multi File Assembly Assembly MySpeller Version X Metadaten Importe
Manifest Files Exporte Metadaten Importe Exporte Metadaten Importe Exporte Exporte MSIL Code (kompiliert) MSIL Code (kompiliert) MSIL Code (kompiliert) MySpeller.DLL MySpellerTools.DLL MyGrammar.DLL …
17
Demo Erstellung einer Multi File Assembly
18
Private und Public Assemblies
Private Assemblies Befinden sich im Applikationsverzeichnis oder einem Unterverzeichnis davon Werden nur von einer Applikation genutzt Public Assemblies Werden von einer oder mehreren Applikationen genutzt Befinden sich an einem zentralen Ort, dem Global Assembly Cache (GAC)
19
Der Global Assembly Cache
Speicherort für Public Assemblies 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
20
Identifizierung von Assemblies
Assemblies im GAC müssen eindeutig identifizierbar sein Was passiert, wenn es zwei verschiedene MySpeller-Bibliotheken gibt? COM-Lösung: Eindeutige GUID?
21
Strong Names [1/3] Strong Names liefern Identität
Teile der Metainformation werden mit einem Private Key digital signiert Assemblies, welche die Public Assembly referenzieren, enthalten den entsprechenden Public Key Strong Names sind sicher Nur der Autor hat den Private Key und kann damit signieren Manipulationen werden verhindert
22
Strong Names [2/3] + Public Key Metadaten Manifest Private Key
Hash-Wert Public Key Metadaten Manifest Private Key + .snk File MSIL Code (kompiliert) RSA Signatur MySpeller.DLL Assembly MySpeller
23
Strong Names [3/3] + A=B ? Public Key Metadaten Manifest Private Key
Hash-Wert A Hash-Wert B .snk File MSIL Code (kompiliert) + RSA Signatur RSA Signatur MySpeller.DLL Assembly MySpeller
24
Demo Der Global Assembly Cache (GAC)
25
.NET Deployment: Grundregel
Verwenden Sie möglichst wenige Shared Assemblies! 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 Eine solche Applikation läuft beispielsweise auch direkt von CD!
26
Shared Assemblies Shared Assemblies sind trotzdem unvermeidbar
Systembibliotheken, Datenzugriffsbibliotheken uvm. Änderungen an Shared Assemblies beeinflussen potentiell viele Applikationen (wie "einst" unter COM! ;-) Bei negativen Auswirkungen auf einzelne Applikationen kann selektiv durch Konfigurationsfiles eingegriffen werden!
27
Konfigurationsfiles [1/2]
"Human-readable" XML-Files Bestimmen die Regeln für die Suche nach der richtigen Assembly ("Assembly Binding") Wo suchen? Welche Version verwenden?
28
Konfigurationsfiles [2/2]
Application Configuration Files Bestimmen für jede Applikation einzeln, wie und wo nach Assemblies gesucht wird Publisher Configuration Files Leiten Aufrufe an einzelne Shared Assemblies auf neuere Versionen um (bei Bugfixes) Machine Configuration Files Gelten global für den gesamten Computer Überschreiben Application Configuration
29
Konfigurationsfiles editieren
„Per Hand“ mit Notepad Mit PlugIns der Management-Konsole Windows XP: Systemsteuerung Verwaltung .NET Framework Konfiguration
30
Deployment Szenario 1 Einfaches XCopy Deployment
Alle Files von MyOffice sollen in ein Applikationsverzeichnis
31
Deployment Szenario 1 C:\WINNT\ASSEMBLY C:\PROGRAMME\MYOFFICE
MyCalc.EXE MyText.EXE XCOPY MySpeller.DLL C:\PROGRAMME\MYOFFICE\TOOLS Global Assembly Cache Applikationsverzeichnis
32
Demo Deployment von „MyOffice“ per XCopy
33
Deployment Szenario 2 Verschieben von Komponenten in Unterverzeichnisse MySpeller soll in das Unterverzeichnis \Tools unterhalb des Applikations-verzeichnis verschoben werden Dieser Pfad muß im Application Configuration File eingetragen werden
34
Deployment Szenario 2 C:\WINNT\ASSEMBLY C:\PROGRAMME\MYOFFICE
MyText.EXE MyCalc.EXE Wo ist MySpeller? MySpeller.DLL MyText.EXE .config <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas- microsoft-com:asm.v1"> <probing privatePath="tools;"/> </assemblyBinding> </runtime> </configuration> C:\PROGRAMME\MYOFFICE\TOOLS Global Assembly Cache Applikationsverzeichnis
35
Demo Verschieben der Komponente „MySpeller“
36
Deployment Szenario 3 "MySpeller" soll eine Shared Assembly werden
MySpeller muß einen StrongName bekommen 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
37
Deployment Szenario 3 C:\WINNT\ASSEMBLY C:\PROGRAMME\MYOFFICE
MySpeller.DLL MyText.EXE MyCalc.EXE MyText.EXE .config Wo ist MySpeller? C:\PROGRAMME\MYOFFICE\TOOLS MySpeller.DLL Global Assembly Cache Applikationsverzeichnis
38
Demo Signieren von „MySpeller“ und Installation im Global Assembly Cache
39
Deployment Szenario 4 [1/2]
Ein neue Version von MySpeller ist verfügbar 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"
40
Deployment Szenario 4 C:\WINNT\ASSEMBLY C:\PROGRAMME\MYOFFICE
MySpeller.DLL Version 1.0 MyText.EXE MyCalc.EXE policy.1.0. MySpeller.DLL MyText.EXE .config MySpeller.DLL Version 1.5 C:\PROGRAMME\MYOFFICE\TOOLS <configuration> <runtime> <assemblyBinding xmlns="…" <dependentAssembly> <assemblyIdentity name="MySpeller" <bindingRedirect oldVersion=" " newVersion=" "/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> MySpeller.DLL Global Assembly Cache Applikationsverzeichnis
41
Demo 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! Einzelne Applikationen können in ihrem Application Configuration File bestimmen, daß die vorherige Version verwendet wird ("Safe Mode")
43
Deployment Szenario 4 C:\WINNT\ASSEMBLY C:\PROGRAMME\MYOFFICE
MySpeller.DLL Version 1.0 MyText.EXE MyCalc.EXE policy.1.0. MySpeller.DLL MyText.EXE .config MySpeller.DLL Version 1.5 C:\PROGRAMME\MYOFFICE\TOOLS <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding <dependentAssembly> <assemblyIdentityname="MySpeller"/> <publisherPolicy apply="no"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> MySpeller.DLL Global Assembly Cache Applikationsverzeichnis
44
Demo „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 Erstellen von Datenbanken Setup von Message Queues 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 Überschreibt entsprechende Methoden, um bei der Installation Aktionen auszuführen Install UnInstall Rollback
47
Aufruf der Custom Installer -Methoden
Komandozeilen-Tool InstalUtil.exe Custom Action innerhalb einer Microsoft Installer Package (MSI-Datei)
48
Demo „MySpeller“-Datenbank über InstallUtil.exe installieren
49
Setup-Projekte mit VS .NET
Visual Studio . NET bietet gute Unterstützung der MSI-Technologie Projekttyp „Setup Project“ Wizard hilft bei der Erstellung .NET-Deployment Features sind integriert Installation von Shared Assemblies in den Global Assembly Cache Aufruf von CustomInstaller-Methoden durch Custom Actions
50
Vorteile der MSI-Technologie
Transaktionsbasierte Installation „Alles oder nichts“ Saubere Deinstallation Logging Unterstützung von Installationsmodi „Vollständig“, „Typisch“, „Benutzerdefiniert“ Dritthersteller-Tool (InstallShield, WISE) wird benötigt Konfigurierbare Benutzeroberfläche
51
Demo 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 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 Ca. 21 MB groß, installiert komplette Runtime DotNetFx.EXE kann per Bootstrapper installiert werden (silent mode) Siehe
54
Vielen Dank! Fragen kostet nichts…
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.