Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu...

22
1 Dozent begrüßt Sie herzlich zum Vortrag auf der VODC 2006 Konfiguration von .NET Applikationen Michael Fischer Copyright © 2006 Fischer & Consultants GmbH (F&C) Martinstrasse 1 44137 Dortmund www.appfact.com Kontakt: Michael Fischer Email [email protected] Phone +49 (172) 6801489 Fax +49 (941) 599212011 Hinweis Zum Zeitpunkt der Konferenz war der Design-Support für Application Settings noch nicht Bestandteil der aktuellen Beta von Vulcan.NET. Dieses Feature – ein Bestandteil der Visual Studio Integration – war jedoch inoffiziell als Bestandteil des fertigen Produktes angekündigt. Die Beispiele in dieser Präsentation verwenden daher leider noch Code, der in C# und nicht in Vulcan.NET geschrieben ist, um die Konzepte schon zu diesem frühen Zeitpunkt demonstrieren zu können.

Transcript of Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu...

Page 1: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

1

Dozent

begrüßt Sie herzlichzum Vortrag auf der VODC 2006

Konfiguration von .NET Applikationen

Michael Fischer

Copyright © 2006Fischer & Consultants GmbH (F&C)Martinstrasse 144137 Dortmundwww.appfact.com

Kontakt: Michael FischerEmail [email protected] +49 (172) 6801489Fax +49 (941) 599212011

Hinweis

Zum Zeitpunkt der Konferenz war der Design-Support für Application Settings noch nicht Bestandteil der aktuellen Beta von Vulcan.NET. Dieses Feature – ein Bestandteil der Visual Studio Integration – war jedoch inoffiziell als Bestandteil des fertigen Produktes angekündigt. Die Beispiele in dieser Präsentation verwenden daher leider noch Code, der in C# und nicht in Vulcan.NET geschrieben ist, um die Konzepte schon zu diesem frühen Zeitpunkt demonstrieren zu können.

Page 2: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

2

Folie 2 von 21

Konfiguration von .NET Applikationen

Inhalt

1. Historie

2. Grundlagen

3. SimpleCSharpSample:Konfiguration (fast) ohne Code

4. Selbst ist der Entwickler I:ConfigurationManager

5. Selbst ist der Entwickler II:Eigenes SettingObjektmodellMSDN-Beispiel

6. Mehr aus System.Configuration

7. Fragen

Abstract:

Wie hätten Sie's denn gerne?

Konfiguration von Vulcan.NET Applikationen

Die Konfiguration von Applikationen ist so alt wie die Software-Entwicklung selbst und ihre Speicherung vielfältigen Moden unterworfen. Die Palette reicht von hart codierten Einstellungen, den legendären INI-Dateien und der (zu Recht) gehassten Registry über Einträgen in SQL-Tabellen bis hin zum Dernier Cri: XML-Dateien. Als Teil des .NET Framework 2.0 steht Vulcanierndie Bibliothek System.Configuration zur Verfügung, ein mächtiges Framework für die Speicherung von Applikations- und Anwenderspezifischen Einstellungen, dessen Leistungsfähigkeit sich nicht gerade auf den ersten Blick erschließt.

Michael Fischer nimmt sich die Konfiguration von Vulcan.NET Programmen in allen Facetten vor. In seiner Session begegnen sie einfachen Konfigurationseinstellungen für das gesamte Programm, lokalen oder wandernden Benutzereinstellungen und persistenten Konfigurations-objekten. Sie schließen Freundschaft mit dynamisch konfigurierbaren Eigenschaften im Formular-Editor von Visual Studio, lernen das PropertyGridlieben und bekommen einen allgemein verwendbaren und einsatzbereiten Dialog für Benutzereinstellungen geliefert. Und wer sich noch nie Vulcan.NET im Visual Studio angesehen hat, bekommt einen ersten Eindruck der neuen Entwicklungsumgebung.

Page 3: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

3

Folie 3 von 21

Konfiguration von .NET Applikationen

1. Historie

Meine kleine Historie von Konfigurationsquellen

n DATA-Zeilen in eigenen Modulenà GW-Basic: hartcodierte Einstellungen im Code

n INI-Dateienà Clipper: Zugriffsklasse (Eigenentwicklung) auf Basis von FOpenà VO: Zugriffsklasse (Eigententwicklung) auf Basis des Win32 API

n Registryà VO: Zugriffsklasse (Eigententwicklung) auf Basis des Win32 API

n SQLà VO: direkter Zugriff auf Tabellen über SQL-Klassen

n XMLà VO: direkter Zugriff über Klassen des MSXML-Parsersà C#: Application Settings über System.Configuration

Zu den DATA-Zeilen

In GW-Basic hatten wir z.B. in meiner damaligen Firma die Escape-Sequenzen zur Bildschirmsteuerung der Terminals unterschiedlicher Hersteller in DATA-Zeilen hinterlegt. Für jedes unterstützte Terminal gab es ein Modul. Um die Software für andere Terminals zu erstellen, musste nur das entsprechende Modul gelinkt werden. Immerhin.

Page 4: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

4

Folie 4 von 21

Konfiguration von .NET Applikationen

1. Historie

Probleme der Vergangenheit

n Hartcodierte Settingsà können nur vom Entwickler geändert werden

n INI-Dateienà robust und einfachà aber relativ ungeeignet für komplexe Einstellungen (z.B. Bäume)

n Registryà §$%*# Registry

n SQLà ohne Verbindung zur Datenbank keine Einstellungen (und wo kommt dann der Connection String hin?)

n XMLà VO: Keine Unterstützung durch fertige Klassen, Rechteprobleme

XML

Ein Problem war z.B. der relativ naive Ansatz, über den MS XML-Parser direkt in XML-Dateien im Verzeichnis der Applikation zu schreiben, also C:\Programme\MeineApplikation\Config.XML. Das funktioniert solange, wie der Benutzer Schreibrechte auf diesem Verzeichnis hat, die benötigt der XML-Parser nämlich. Viele Firmen haben aber über Policies Standard-Benutzern Schreibrechte auf das Programme-Verzeichnis entzogen.

Page 5: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

5

Folie 5 von 21

Konfiguration von .NET Applikationen

2. Grundlagen

Application Settings unter .NET 2.0

Gilt für Windows Applikationen (System.Windows.Forms).

n Design-Zeit Unterstützung für VB.NET und C#à Eigener Editor für Settingsà Verfügbarkeit der Settings im Form-Editor

n Einfacher Zugriff im Codeà My Namespace in VB.NETà Properties Namespace in C#

Für diese Möglichkeiten muss keine Zeile Code geschrieben werden. Darüberhinaus:

n Sehr umfangreiche Basisklassen für eigene Erweiterungenà System.Configuration Namespace

Hinweise

Die Klassen zur Handhabung von Konfigurationseinstellungen sind im von Vulcan.NET verwendeten Framework 2.0 gegenüber der Version 1.1 erheblich erweitert worden. Diese reichten in den meisten Fällen nicht aus. So gab es z.B. keine fertige Funktionalität zur Speicherung von Benutzerbezogenen Einstellungen.

Entsprechend gibt es auf dem Internet viele Artikel und Beispielklassen (bis hin zum Configuration Application Block der Enterprise Library 1.1, einer Bibliothek von Microsoft selbst), die die Schwächen des Frameworks 1.1 ausmerzen. Diese Ansätze sind i.d.R. heute obsolet. Achten Sie bei Artikeln oder Code zum Thema Configuration oder Application Settings daher unbedingt darauf, dass diese für .NET 2.0 geschrieben wurden.

Die in dieser Präsentation beschriebenen Verfahren gelten nur für Windows Applikationen. Für Web Applikationen (ASP.NET) gibt es leicht veränderte Ansätze.

Page 6: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

6

Folie 6 von 21

Konfiguration von .NET Applikationen

2. Grundlagen

Eigenschaften von Settings

n Nameunter dem die einzelne Einstellung zur Laufzeit angesprochen wird.

n Typdes Werts. Neben Standard-Datentypen geht hier jede Klasse.

n Gültigkeitsbereich (Scope)ist entweder Application oder User.

n Wert

Page 7: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

7

Folie 7 von 21

Konfiguration von .NET Applikationen

2. Grundlagen

Bereiche von Settings

n ApplicationApplication Settings gelten für alle Benutzer einer Applikation.Sie sind read only zur Laufzeit, d.h. die Applikation selbst kann sie aus Sicherheitsgründen nicht ändern.

n UserUser Settings gelten nur für den aktuellen Benutzer (Windows).Sie sind read/write zur Laufzeit, d.h. die Applikation kann sie verändern und speichern. Sie lassen sich weiter unterscheiden:à non-roaming (lokal für den Benutzer auf dem jeweiligen Rechner, Default)à roaming (wandert bei Anmeldung mit dem aktuellen Benutzer im Netz)

Application Settings können dagegen selbstverständlich von einem Benutzer außerhalb der Applikation durch direkte Änderung der entsprechenden XML-Datei verändert werden. Wenn er denn Schreibrechte auf der Datei hat …

Page 8: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

8

Folie 8 von 21

Konfiguration von .NET Applikationen

2. Grundlagen

Pfade für User Settings

n <app>.config im Programmverzeichnisà nur lesend für Defaults

n user.config unter Dokumente und Einstellungenprivate void btnSettingDirectories_Click(object sender, EventArgs e)

{StringBuilder msg = new StringBuilder();msg.AppendFormat("Roaming: {0}\n", Application.UserAppDataPath);msg.AppendFormat("Local: {0}", Application.LocalUserAppDataPath);MessageBox.Show(msg.ToString(), "Storage of User Settings");}

Hinweis

Der Name der Firma sowie der Name und die Version der Applikation, die in den Pfad mit eingebaut werden, werden über die Attribute in der AssemblyInfo definiert.

Page 9: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

9

Folie 9 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Die Beispiel-Applikation

n Neue C# Windows Application

n AssemblyInfo.cs ausfüllen!à Firmenname, Applikationsname und Version finden Einzug in den Namen der User-Konfigurationsdatei

n Form gestalten

Refactoring

•Rename der Form von Form1.cs in MainForm.cs führt nicht nur zu einem Rename der Form selbst sondern auch zur Änderung allen abhängigen Codes, z.B. dem Aufruf in Program.cs.

Anmerkungen zum Form Editor

•Man beachte die Positionierungshilfe bei der Platzierung der Controls

•Verwendung von Anchor (wird bereits zur Design-Zeit berücksichtigt)

•Properties: Misc, AutoComplete für eine Verzeichnisauswahl

Page 10: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

10

Folie 10 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Definition von Settings in Visual Studio

n Editorà Aufruf über Properties-Dialog, Settings Tabà Alternativ Doppelklick auf Properties, Settings im Solution Explorer

Synchronize

Über den Synchronize-Button können während einer Testphase während der Bedienung der Applikation gespeicherte User Settings (user.config unterhalb von Dokumente und Einstellungen) wieder gelöscht werden.

View Code

Generiert beim ersten Mal die Settings-Klasse, in der man selbst eigenen Code schreibt.

Page 11: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

11

Folie 11 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Generierter Code

n app.configà XML-Konfigurationsdatei mit allen definierten Einstellungenà wird beim Build mit dem Namen der EXE in das bin-Verzeichnis kopiert

n Settings.Designer.csà gehört zum Namespace Propertiesà generierte sealed partial classà Singletonà fertige Properties zum Zugriff auf die Einstellungenà Default-Werte als Attribute

n Settings.csà andere Hälfte der generierten partial classà für eigene Erweiterungen, z.B. Event Handler

Notiz

Das Verfahren, generierte Klassen in eine interne, partial Klasse mit dem generierten Code einerseits und einer zweiten, für die Bearbeitung bestimmten partial Klasse, findet in C# z.B. auch beim Form Editor statt. In gewisser Weise entspricht das dem bewährten Verfahren (Best Practice) unter VO, von den vom Window Editor generierten Klassen in einem eigenen Modul zu vererben und dort seinen Code zu platzieren.

Page 12: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

12

Folie 12 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

app.config

Wer möchte, kann die XML-Datei auch direkt bearbeiten, Visual Studio bietet eine recht ordentliche Code Completion auch für XML.

Page 13: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

13

Folie 13 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Settings.Designer.cs

Die generierte Settings Klasse vererbt von ApplicationSettingsBase aus dem System.Configuration Namespace und erhält so ihre Grundfunktionalität, z.B. den Indexer für die einzelnen Properties und die Persistenz der Settingsüber einen Provider.

Page 14: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

14

Folie 14 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Verwendung von Settings im Code

Settings können über den Properties Namespace im Code direkt angesprochen werden. Beispiel-Methoden der TestForm Klasse.

Page 15: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

15

Folie 15 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Verwendung von Settings im Form Editor

n Control selektieren

n Properties, Data, ApplicationSettings, PropertyBinding, Textà dort die Combobox öffnen und das gewünschte Application Setting wählenà der Default Wert ist bereits im Form Editor zu sehen

n Definition neuer Settings auch direkt aus Form Editor

Page 16: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

16

Folie 16 von 21

Konfiguration von .NET Applikationen

3. Beispiel: Konfiguration (fast) ohne Code

Wo kommen die Settings zur Laufzeit her

Settings werden in dieser Reihenfolge gesucht

n user.configà aus dem Pfad unterhalb von Dokumente und Einstellungenà gilt nur für User Settings

n .config im Verzeichnis der EXE

n EXE oder DLLà Keine .config gefundenà Default-Werte als Attribute der generierten Settings Klasse im Code!

Page 17: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

17

Folie 17 von 21

Konfiguration von .NET Applikationen

4. ConfigurationManager

Startpunkt für direkten, selbst codierten Zugriff auf Konfigurationsdaten

n Neu in .NET 2.0à Ersetzt AppSettingsReader

n Referenz auf system.configuration notwendig

n Umfangreicher Baum von Klassenà für Section Groups, Sections, Properties

Page 18: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

18

Folie 18 von 21

Konfiguration von .NET Applikationen

4. ConfigurationManager

n Dient auch dem Schreiben von Konfigurationseinstellungenà niemals selbst per XMLReader oder XMLWriter die Dateien öffnenà ansonsten drohen Security Probleme

n Funktioniert bereits in Vulcan.NET

Page 19: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

19

Folie 19 von 21

Konfiguration von .NET Applikationen

5. Eigene Objektmodelle für Settings

Demonstration des MSDN Beispiels von Bryan Porter

n Download von msdn.microsoft.com

n Eigene Klassen vererben von Basisklassen in System.Configuration

n Intensive Verwendung von Attributen

n Generische Programmierung

n Alternative Darstellung über PropertyGrid

Zur Download-Adresse mit Code siehe die Literaturhinweise in den Notizen der letzten Folie.

Page 20: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

20

Folie 20 von 21

Konfiguration von .NET Applikationen

6. Mehr aus System.Configuration

Weitere Bereiche

n Validatorenà Klassen zur Überprüfung von Werten

n Verschlüsselte Konfigurationsdateienà DpapiProtectedConfigurationProvider

n Übernahme von Benutzereinstellungen bei Programmupdatesà Der Pfad unter Dokumente und Einstellungen ändert sichà Properties.Settings.Default.Upgrade();

n Andere Speicherorteà Default ist LocalFileSettingsProviderà Base Class SettingsProvider für eigene Provider

Page 21: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

21

Folie 21 von 21

Konfiguration von .NET Applikationen

7. Fragen

?

Page 22: Konfiguration von .NET Applikationen · ein Modul. Um die Software für andere Terminals zu erstellen, musste nur Um die Software für andere Terminals zu erstellen, musste nur das

22

Vielen Dank für Ihre Aufmerksamkeit!

Gesellschaft für Softwareentwicklung und Unternehmensberatung mbH

Martinstrasse 144137 Dortmund

[email protected]

Literaturverzeichnis

Porter, Bryan: Configure This; Parameterize Your Apps Using XML Configuration In The .NET Framework 2.0; in MSDN Magazine 06.2006. http://msdn.microsoft.com/msdnmag/issues/06/06/ConfigureThis/

Stoecker, Matt: Using Settings in C#; in Visual Studio 2005 Technical Articles.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/SettingsCS_RL.asp