Wo wird die Konfiguration bei Verwendung einer Settings.settings-Datei in .NET tatsächlich gespeichert?

100

Wo wird die Konfiguration bei Verwendung einer Settings.settings-Datei in .NET tatsächlich gespeichert? Ich möchte die gespeicherten Einstellungen löschen, um zum Standardzustand zurückzukehren, kann aber nicht finden, wo sie gespeichert sind ... irgendwelche Ideen?

Adam Haile
quelle

Antworten:

100

Dies hängt davon ab, ob sich die von Ihnen gewählte Einstellung im Bereich "Benutzer" oder "Anwendung" befindet.

Benutzerbereich

Benutzerbereichseinstellungen werden in gespeichert

C: \ Dokumente und Einstellungen \ Benutzername \ Lokale Einstellungen \ Anwendungsdaten \ Anwendungsname

Sie können sie zur Laufzeit lesen / schreiben.

Für Vista und Windows 7 lautet der Ordner

C: \ Benutzer \ Benutzername \ AppData \ Local \ Anwendungsname

oder

C: \ Benutzer \ Benutzername \ AppData \ Roaming \ Anwendungsname

Anwendungsbereich

Die Einstellungen für den Anwendungsbereich werden in gespeichert AppName.exe.configund sind zur Laufzeit schreibgeschützt.

SolutionYogi
quelle
20
Der Ordner für die Einstellungen des Benutzerbereichs unter Vista und Win7 lautet je nach C: \ Benutzer \ Benutzername \ AppData \ Local \ Anwendungsname \ Publisher \ Anwendungsname \ Version oder C: \ Benutzer \ Benutzername \ AppData \ Roaming \ Anwendungsname \ Publisher \ Anwendungsname \ Version Der Wert der Roaming-Eigenschaft im Bereich "Einstellungen".
Jakdep
4
es sei denn, es ist ein Add-In. In diesem Fall ist es AppName.dll.config
Anonymous Type
4
Meine lokale user.config unter Windows 7 befindet sich in C: \ Users \ <Benutzername> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

Hier ist das Snippet, mit dem Sie programmgesteuert den Speicherort der Datei user.config abrufen können:

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (dh settings.settings) verwenden standardmäßig PerUserRoamingAndLocal für Benutzereinstellungen (wie ich mich erinnerte).

Update: Seltsam, aber hier gibt es zu viele falsche Antworten. Wenn Sie nach Ihrer Einstellungsdatei mit Benutzerbereich (user.config) suchen, befindet sie sich im folgenden Ordner (für Windows XP):

C: \ Dokumente und Einstellungen \ (Benutzername) \ Lokale Einstellungen \ Anwendungsdaten \ (Firmenname, falls vorhanden) \ (App-Name) .exe_ (URL | Starker Name) _ (Hash) \ (App-Version) \

URL oder StrongName hängen davon ab, ob Sie einen starken Namen für die Anwendungsassemblierung haben oder nicht.

Schiedsrichter
quelle
Irgendeine Idee, was auf diesem Weg zum Hash beiträgt? Jede nachfolgende Version meiner App erhält einen anderen Hashwert, wodurch das Aufrufen von ApplicationSettingsBase.Upgrade () sinnlos wird. : /
Mal Ross
2
Hash ist der SHA1-Hash von StrongName, wenn die App signiert ist, oder der Pfad, wenn die App nicht signiert ist. Mehr hier msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
Schiedsrichter
20

Angenommen, Sie sprechen von Desktop- und nicht von Webanwendungen:

Wenn Sie einem Projekt Einstellungen hinzufügen, erstellt VS eine Datei mit dem Namen app.configin Ihrem Projektverzeichnis und speichert die Einstellungen in dieser Datei. Außerdem wird die Settings.csDatei erstellt, die die statischen Accessoren für die einzelnen Einstellungen bereitstellt.

Zur Kompilierungszeit kopiert VS (standardmäßig; Sie können dies ändern) das app.configin das Build-Verzeichnis und ändert seinen Namen entsprechend der ausführbaren Datei (z. B. wenn Ihre ausführbare foo.exeDatei benannt ist , wird die Datei benannt foo.exe.config). Dies ist der Name der. Der NET-Konfigurationsmanager sucht, wann er zur Laufzeit Einstellungen abruft.

Wenn Sie eine Einstellung über den VS-Einstellungseditor ändern, werden beide aktualisiert app.config als alsSettings.cs . (Wenn Sie sich die Eigenschafts-Accessoren im generierten Code in ansehen Settings.cs, werden Sie feststellen, dass sie mit einem Attribut gekennzeichnet sind, das den Standardwert der Einstellung in Ihrer app.configDatei enthält.) Wenn Sie eine Einstellung ändern, indem Sie die app.configDatei direkt bearbeiten , Settings.cswird nicht aktualisiert, aber der neue Wert wird weiterhin von Ihrem Programm verwendet, wenn Sie es ausführen, da es app.configzur foo.exe.configKompilierungszeit kopiert wird. Wenn Sie dies deaktivieren (indem Sie die Eigenschaften der Datei festlegen), können Sie eine Einstellung ändern, indem Sie die foo.exe.configDatei direkt im Erstellungsverzeichnis bearbeiten .

Dann gibt es benutzerdefinierte Einstellungen.

Die Einstellungen für den Anwendungsbereich sind schreibgeschützt. Ihr Programm kann Einstellungen für den Benutzerbereich ändern und speichern, sodass jeder Benutzer seine eigenen Einstellungen vornehmen kann. Diese Einstellungen werden nicht in der foo.exe.configDatei gespeichert (da Programme zumindest unter Vista nicht in ein Unterverzeichnis Program Filesohne Erhöhung schreiben können ). Sie werden in einer Konfigurationsdatei im Anwendungsdatenverzeichnis des Benutzers gespeichert.

Der Pfad zu dieser Datei lautet %appdata%\%publisher_name%\%program_name%\%version%\user.configzC:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config . Beachten Sie, dass, wenn Sie Ihrem Programm einen starken Namen gegeben haben, der starke Name an den Programmnamen in diesem Pfad angehängt wird.

Robert Rossney
quelle
1
Es sieht so aus, als würde die My_Company-Komponente des Pfads standardmäßig Microsoft verwenden. Ich habe noch keinen Weg gefunden, dies zu ändern, der tatsächlich funktioniert, wenn jemand weiß, dass es gut wäre, dies hinzuzufügen.
1
user565869, haben Sie es in Visual Studio versucht, öffnen Sie die Anwendungsregisterkarte der Projekteigenschaft, klicken Sie auf die Schaltfläche mit den Baugruppeninformationen, und Sie sollten dann in der Lage sein, die Firma zu ändern? Wiederholen Sie dies für jedes Projekt in Ihrer Lösung
gg89
15

Beim Stöbern nach dem Hash im Ordnernamen bin ich auf Folgendes gestoßen (über diese Antwort ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(Bearbeiten: Link zur Wayback-Maschine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

Der genaue Pfad der user.configDateien sieht ungefähr so ​​aus:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

wo

<Profile Directory>- ist entweder das Roaming-Profilverzeichnis oder das lokale. Die Einstellungen werden standardmäßig in der lokalen user.configDatei gespeichert. Um eine Einstellung in der Roaming - speichern - user.configDatei, müssen Sie die Einstellung mit der markieren SettingsManageabilityAttributemit SettingsManageabilityzu Satz Roaming.

<Company Name>- ist in der Regel die von der angegebene Zeichenfolge AssemblyCompanyAttribute(mit der Einschränkung, dass die Zeichenfolge bei Bedarf maskiert und abgeschnitten wird, und wenn dies in der Assembly nicht angegeben ist, haben wir eine Fallback-Prozedur).

<App Name>- ist normalerweise die durch die angegebene Zeichenfolge AssemblyProductAttribute(dieselben Einschränkungen wie für den Firmennamen).

<Evidence Type>und <Evidence Hash>- Informationen, die aus den Beweisen für die App-Domäne abgeleitet wurden, um eine ordnungsgemäße Isolation der App-Domäne und der Assembly zu gewährleisten.

<Version>- normalerweise die in der AssemblyVersionAttribute. Dies ist erforderlich, um verschiedene Versionen der nebeneinander bereitgestellten App zu isolieren.

Der Dateiname ist immer einfach ' user.config'.

Sucher
quelle
Leider ist der Blog-Link defekt. Ich bin sicher, es wäre interessant gewesen.
UweBaemayr
3

Es befindet sich in einem Ordner mit dem Namen Ihrer Anwendung im Ordner "Anwendungsdaten" im Basisordner des Benutzers (C: \ Dokumente und Einstellungen \ Benutzer unter XP und C: \ Benutzer \ Benutzer unter Windows Vista).

Auch hier gibt es einige Informationen .

PS: - Versuchen Sie, mit% appdata% in der Run-Box darauf zuzugreifen!

TheVillageIdiot
quelle
2

Ähm, können Sie nicht einfach Settings.Default.Reset () verwenden, um Ihre Standardeinstellungen wiederherzustellen?

Kildareflare
quelle
1

Alle Ihre Einstellungen werden in der jeweiligen .config-Datei gespeichert.

Die .settings-Datei bietet einfach eine stark typisierte Klasse für eine Reihe von Einstellungen, die zusammengehören. Die tatsächlichen Einstellungen werden jedoch in app.config oder einer .config-Datei in Ihrer Anwendung gespeichert.

Wenn Sie eine .settings-Datei hinzufügen, wird automatisch eine app.config hinzugefügt, in der die Einstellungen gespeichert werden, sofern Sie noch keine haben.

Praveen Angyan
quelle
1

Wenn sich Ihre Einstellungsdatei in einer Web-App befindet, befinden sie sich in der Datei web.config (direkt unter Ihrem Projekt. Wenn sie sich in einem anderen Projekttyp befinden, befinden sie sich in der Datei app.config (auch unter Ihrem Projekt). .

Bearbeiten

Wie in den Kommentaren erwähnt: Ihre Einstellungen für die Entwurfszeitanwendung befinden sich in einer app.config-Datei für andere Anwendungen als Webanwendungen. Beim Erstellen wird die Datei app.config in das Ausgabeverzeichnis kopiert und trägt den Namen yourexename .exe.config. Zur Laufzeit wird nur die Datei mit dem Namen yourexename.exe.config gelesen.

JMarsch
quelle
1
Nicht richtig. In der laufenden Anwendung befindet sich keine Einstellungsdatei für app.config, da app.config in [appname] .exe.config umbenannt wird. Außerdem enthält diese Datei nur ApplicationScoped-Einstellungen aus settings.settins.
Schiedsrichter
@arbiter: Vielleicht habe ich die Frage falsch verstanden, aber Adam schien nach den Standardeinstellungen für die Entwurfszeit zu fragen. Diese werden in app.config gespeichert. Zur Erstellungszeit wird die Datei app.config in das Erstellungsverzeichnis kopiert und in (theapp.exe.config) umbenannt. Wenn Sie diese Datei jedoch direkt bearbeiten (und in Visual Studio arbeiten), besteht die Gefahr, dass der Inhalt beim nächsten Erstellen überschrieben wird. Fazit: Ändern Sie für eine bereitgestellte App (oder wenn Sie außerhalb der IDE ausgeführt werden) die Datei name.exe.config. Wenn Sie in VS arbeiten, ändern Sie entweder den Standardwert in den Einstellungen oder app.config
JMarsch
0

Zwei Dateien: 1) Eine app.config- oder web.config-Datei. Die Einstellungen können nach dem Erstellen mit einem Texteditor angepasst werden. 2) Die Datei settings.designer.cs. Diese Datei verfügt über automatisch generierten Code zum Laden der Einstellung aus der Konfigurationsdatei. Es ist jedoch auch ein Standardwert vorhanden, falls die Konfigurationsdatei nicht über die jeweilige Einstellung verfügt.

Frank Schwieterman
quelle
0

Ich weiß, dass es bereits beantwortet wurde, aber konnten Sie die Einstellungen im Einstellungsdesigner nicht einfach synchronisieren, um zu Ihren Standardeinstellungen zurückzukehren?

jrsconfitto
quelle