Architektur - Settings - Config - exe - Components

01/08/2008 - 22:09 von Andrea Müller | Report spam
Hallo,
ich habe ein Projekt mit einer Config Datei
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings"
type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Client.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<Client.Properties.Settings>
<setting name="Port" serializeAs="String">
<value>8123</value>
</setting>
<setting name="Anwendungsname" serializeAs="String">
<value>MyName_0815</value>
</setting>
</Client.Properties.Settings>
</userSettings>
</configuration>
zzgl. Settings.

Wenn ich dem Projekt Komponenten zuweise, haben, können die
Komponenten
auch Config Dateien haben, diese werden aber nicht in das
Gesamtprojekt kopiert
oder sind nicht ànderbar.

Heißt das jetzt, dass nur die Exe ein Config - Settings Datei haben
darf oder soll?

namespace ucTest
{
public partial class ucTest : UserControl
{
public ucTest( )
{
Settings_ucTest Props = Settings_ucTest.Default;

InitializeComponent();
textBox1.Text = Props.partStarte;
textBox2.Text = Props.partEmpfange;
}
}
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings"
type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ucTest.Settings_ucTest"
type="System.Configuration.ClientSettingsSection, System,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<ucTest.Settings_ucTest>
<setting name="partEmpfange" serializeAs="String">
<value>001</value>
</setting>
<setting name="partStarte" serializeAs="String">
<value>403</value>
</setting>
</ucTest.Settings_ucTest>
</userSettings>
</configuration>

Wie kann ich jetzt die Werte der Komponente àndern, wenn ich diese in
das Gesamtprojekt aufnehmen will?

Dateiname Groesse |Entstehung |letzte Aenderung
|
==Client.exe 24576|31.07.2008 07:47|01.08.2008
13:25|
Client.exe.config 929|31.07.2008 07:06|31.07.2008
14:39|
Client.pdb 32256|31.07.2008 07:47|01.08.2008
13:25|
Client.vshost.exe 5632|31.07.2008 07:48|31.07.2008
07:48|
Client.vshost.exe.config 929|31.07.2008 07:06|31.07.2008
14:39|
Uctest.dll 20480|01.08.2008 13:25|01.08.2008
13:25|
## ucTest.dll.config 923|01.08.2008 13:27|01.08.2008
13:27|
Uctest.pdb 15872|01.08.2008 13:25|01.08.2008
13:25|

## diese Datei habe ich manuell eingefügt.

In der Config darf ich nie àndern, oder?

Microsoft Visual Studio

Der Wert der Einstellung "partEmpfange" wurde in der Datei
"app.config" geàndert.

Der aktuelle Wert in der SETTINGS-Datei ist "001".
Der neue Wert in der Datei "app.config" ist "rrrrrrr001".

Soll der Wert in der SETTINGS-Datei aktualisiert werden?

Ja Nein


Kurzum, wo àndert der Anwender?

Grüße Andrea
 

Lesen sie die antworten

#1 Frank Dzaebel
02/08/2008 - 08:33 | Warnen spam
Hallo Andrea,

ich habe ein Projekt mit einer Config Datei [...]
Wenn ich dem Projekt Komponenten zuweise,
haben, können die Komponenten auch Config
Dateien haben, diese werden aber nicht in das
Gesamtprojekt kopiert oder sind nicht ànderbar.



ok.



Heißt das jetzt, dass nur die Exe ein Config -
Settings Datei haben darf oder soll?



*Alle* Einstellungen werden normal über das *ausführende*
Programm assoziiert/gehostet. Wird etwa in UcTest.cs eine
Props-Eigenschaft geàndert und dann gesichert, dann
landet der Wert zur Laufzeit in der user.config des
Hauptprogrammes (nicht der app.config).
Beachte aber, das es eine app.config und eine
user.config gibt, wobei letztere die benutzerdefinierten
(ànderbaren) Eigenschaften wiederspiegelt.



Wie kann ich jetzt die Werte der Komponente àndern, wenn
ich diese in das Gesamtprojekt aufnehmen will?



Entweder in der Komponente selbst (bei Dir hattest
Du es z.B. im Konstruktor). Oder auch in der
Hauptapplikation, wenn Du z.B. die Properties.Settings
"public" gesetzt hast (oder OOP: über Eigenschaften).
Etwa bei Dir so:

ucTest1.Props.PartEmpfange = "Neu";
ucTest1.Props.Save();




In der Config darf ich nie àndern, oder?



in der app.config ist es im Normalfall nicht vorgesehen, ja.




Kurzum, wo àndert der Anwender?



Der Anwender sollte über einen Dialog (Windows Form)
àndern. Es bietet sich z.B. darin ein PropertyGrid an, mit:

propertyGrid1.SelectedObject = Properties.Settings.Default;

wodurch der User leicht àndern kann. Im FormClosing kann
dann z.B. ein Props.Save() ausgeführt werden.


Ich selber implementiere das meist noch zusàtzlich über eine
generische Liste innerhalb der "Properties.Settings", wodurch
gerade für dieses PropertyGrid durch Attributierung
(z.B. Description) vielerlei zusàtzliche "nice to have" möglich
werden (z.B. Mandantenfàhigkeit).

Das Thema "Konfiguration-mehrere DLLs" ist nicht trival, das
wissen viele nicht (richtig), auch ist die Matrix der Möglichkeiten
tatsàchlich noch um einiges grösser. Aber ich denke, das ist
ein guter Anfang.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen