Deployment und Versioning von .NET Applikationen

Slides:



Advertisements
Ähnliche Präsentationen
Kontenverwaltung Vortragende: Daniel Baier Dauer:
Advertisements

Support.ebsco.com Lernprogramm zum Erstellen einer lokalen Sammlung.
Was gibt´s neues im Bereich Sicherheit
Seminar „Verteilte Systeme“ Thomas Bischoff
Matt Davis Technology Specialist
ASP.NET Tips & Tricks Uwe Baumann
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Web-Entwicklung mit ASP.NET 2.0 und Visual Studio 2005 Uwe Baumann Marketing Manager Developer Tools Microsoft Deutschland GmbH Oliver Scheer Developer.
Uwe Baumann Developer Group Microsoft GmbH Windows Installer - effektiv einsetzen Professionelle Setup-Features in eigenen.
Interoperabilität Microsoft .NET und COM+ Dariusz Parys
DI Christian Donner cd (at) donners.com
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Web Matrix Project Kurzüberblick Dirk Primbs Technologieberater Developer Platform Strategy Group Microsoft Deutschland GmbH.
SPS / WSS Entwicklung Martin Saternus Technical Student Consultant Microsoft Deutschland GmbH
Systemverwaltung wie es Ihnen gefällt.
oodle BelWü Technische Details
Web 2.0 und RIAs - Adobe Air1 Seminar: Web 2.0 und Rich Internet Applications Wintersemester 2007/2008 Daniel Thaidigsmann
Objektorientierte Programmierung
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Java: Dynamische Datentypen
ATHOS Benutzertreffen 12. November Auswerteserver Glashütten, 12. November 2008 HighQSoft GmbH, Andreas Hofmann
Imperative Programmierung Funktionen und Parameter
.NET Nico Orschel Microsoft Student Partner, TU-Ilmenau
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Installationsanleitung 1.02 Hausverwaltung.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Wizards & Builders GmbH Klassenbibliotheken Arbeiten mit Klassenbibliotheken in Microsoft Visual FoxPro.
Wizards & Builders GmbH Übersicht Schulung Übersicht über Schulung für Entwickler unter Microsoft Visual FoxPro.
Erstellen von WebServices mit Visual FoxPro 9.0
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
Uwe Habermann Venelina Jordanova VFP Code in Silverlight Anwendungen ausführen.
Uwe Habermann VFX 10.0 Visual Extend Produktaktivierung.
Björn Schmidt, Hoang Truong Nguyen
Installation FAQ-Forum Zope Basisinstallation Zusätzliche Module (Products) Grundkonfiguration Einrichten neuer Foren.
Dokumenten-Management-System
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 11 Folie 2 Microsoft Internet Information Services (IIS)
SharePoint 2010 for Information Architects
.Net Security. Motivation Rad nicht neu erfinden -> Nutzung der Sicherheitsfunktionen des Betriebssystems (zB Encryption, Authentifizierung,...) Zusätzlich.
SQL Server 2005 CLR-Integration
1 Softwareentwicklung mit.NET Teil 1 Was ist.NET? Die.NET Common Language Runtime Dr. Ralph Zeller DI. Wolfgang Beer Michael Willers.
Systemaufbau / Komponenten
Präsentation von Sonja Pathe
Tools und Verfahren Steffen Krause Technologieberater Microsoft Deutschland GmbH
Seminar Internet Technologien
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 2013 Kapitel 5 Folie 2 Windows Communication Foundation (WCF) s.a.
1.NET Assemblies und Metadaten René Löschl. 2 Inhalt Begriffe Eigenschaften von Metadaten Vorteile von Metadaten Typische Metadaten Zugriff und Verwaltung.
Bonn-to-code.net Thomas van Veen Website:
Unterprogramme in JAVA
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Learning By Doing WebStart Buch S.765 Verfahren, Java-Applikationen über das Internet an die Benützer zu verteilen. Die Java-Applikation wird auf dem.
XJustiz: Elektronischer Rechtsverkehr mit XML
Zero Administration Kit für Microsoft® Windows® Jörg Kramer University Support Center.
© 2014 Fake the Unfakeable Isolating Code Under Test with Microsoft Fakes ©
Kaseya Virtual System Administrator Produkt Update 7.0 Rocco van der Zwet Copyright ©2014 Kaseya 1.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
1 Softwareentwicklung mit.NET Teil 7.NET Security Dr. Ralph Zeller.
Microsoft Silverlight Autor: Christian Pirker. Inhalt Einführung Silverlight Einführung XAML Silverlight 1.0 und 1.1 Silverlight 2.0 Silverlight 3.0 Ausblick.
Was gibt’s neues im Bereich Anpassung Fabian Moritz Consultant, Developer SharePointCommunity.de.
SOFTWARE INSTALLATION NEU ERFUNDEN BASTIAN EICHER ZERO INSTALL.
WS2016: Container von A bis Z
Herzlich willkommen! Windows Server 2016, System Center 2016 & Windows 10 Berlin,
1.
Implementieren von Klassen
 Präsentation transkript:

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 uwebaum@microsoft.com

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

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

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?

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

Ein Beispielprojekt: "MyOffice .NET"

"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

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

"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

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

…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

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 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 MySpeller.DLL

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

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

Demo "MySpeller" im MSIIL Disassembler ILDasm.exe

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 …

Demo Erstellung einer Multi File Assembly

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)

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

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?

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

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

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

Demo Der Global Assembly Cache (GAC)

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

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!

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?

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

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

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

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

Demo Deployment von „MyOffice“ per XCopy

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

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

Demo Verschieben der Komponente „MySpeller“

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

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

Demo Signieren von „MySpeller“ und Installation im Global Assembly Cache

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"

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="1.0.0.0" newVersion="1.5.0.0"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> MySpeller.DLL Global Assembly Cache Applikationsverzeichnis

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

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")

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

Demo „MyCalc“ zur Verwendung der vorherigen Version von „MySpeller“ zwingen

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

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

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

Demo „MySpeller“-Datenbank über InstallUtil.exe installieren

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

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

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

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

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 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/vsredistdeploy.asp

Vielen Dank! Fragen kostet nichts…