When using a Settings.settings file in .NET, where is the config actually stored?
Solution 1
It depends on whether the setting you have chosen is at "User" scope or "Application" scope.
User scope
User scope settings are stored in
C:\Documents and Settings\ username \Local Settings\Application Data\ ApplicationName
You can read/write them at runtime.
For Vista and Windows 7, folder is
C:\Users\ username \AppData\Local\ ApplicationName
or
C:\Users\ username \AppData\Roaming\ ApplicationName
Application scope
Application scope settings are saved in AppName.exe.config
and they are readonly at runtime.
Solution 2
Here is the snippet you can use to programmatically get user.config file location:
public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
try
{
var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
return UserConfig.FilePath;
}
catch (ConfigurationException e)
{
return e.Filename;
}
}
ApplicationSettings (i.e. settings.settings) use PerUserRoamingAndLocal for user settings by default (as I remembered).
Update: Strange but there are too many incorrect answers here. If you are looking for you user scoped settings file (user.config) it will be located in the following folder (for Windows XP):
C:\Documents and Settings\(username)\Local Settings\Application Data\(company-name-if-exists)\(app-name).exe_(Url|StrongName)_(hash)\(app-version)\
Url or StrongName depends on have you application assembly strong name or not.
Solution 3
Assuming that you're talking about desktop and not web applications:
When you add settings to a project, VS creates a file named app.config
in your project directory and stores the settings in that file. It also builds the Settings.cs
file that provides the static accessors to the individual settings.
At compile time, VS will (by default; you can change this) copy the app.config
to the build directory, changing its name to match the executable (e.g. if your executable is named foo.exe
, the file will be named foo.exe.config
), which is the name the .NET configuration manager looks for when it retrieves settings at runtime.
If you change a setting through the VS settings editor, it will update both app.config
and Settings.cs
. (If you look at the property accessors in the generated code in Settings.cs
, you'll see that they're marked with an attribute containing the default value of the setting that's in your app.config
file.) If you change a setting by editing the app.config
file directly, Settings.cs
won't be updated, but the new value will still be used by your program when you run it, because app.config
gets copied to foo.exe.config
at compile time. If you turn this off (by setting the file's properties), you can change a setting by directly editing the foo.exe.config
file in the build directory.
Then there are user-scoped settings.
Application-scope settings are read-only. Your program can modify and save user-scope settings, thus allowing each user to have his/her own settings. These settings aren't stored in the foo.exe.config
file (since under Vista, at least, programs can't write to any subdirectory of Program Files
without elevation); they're stored in a configuration file in the user's application data directory.
The path to that file is %appdata%\%publisher_name%\%program_name%\%version%\user.config
, e.g. C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config
. Note that if you've given your program a strong name, the strong name will be appended to the program name in this path.
Solution 4
While browsing around to figure out about the hash in the folder name, I came across (via this answer):
http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx
(edit: Wayback Machine link: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx)
The exact path of the
user.config
files looks something like this:
<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config
where
<Profile Directory>
- is either the roaming profile directory or the local one. Settings are stored by default in the localuser.config
file. To store a setting in the roaminguser.config
file, you need to mark the setting with theSettingsManageabilityAttribute
withSettingsManageability
set toRoaming
.
<Company Name>
- is typically the string specified by theAssemblyCompanyAttribute
(with the caveat that the string is escaped and truncated as necessary, and if not specified on the assembly, we have a fallback procedure).
<App Name>
- is typically the string specified by theAssemblyProductAttribute
(same caveats as for company name).
<Evidence Type>
and<Evidence Hash>
- information derived from the app domain evidence to provide proper app domain and assembly isolation.
<Version>
- typically the version specified in theAssemblyVersionAttribute
. This is required to isolate different versions of the app deployed side by side.The file name is always simply '
user.config
'.
Solution 5
Erm, can you not just use Settings.Default.Reset() to restore your default settings?
Related videos on Youtube
Miguel Ventura
Updated on July 08, 2022Comments
-
Miguel Ventura almost 2 years
When using a Settings.settings file in .NET, where is the config actually stored? I want to delete the saved settings to go back to the default state, but can't find where it's stored... any ideas?
-
arbiter almost 15 yearsNot correct. There is no app.config settings file in running application, because app.config will be renamed into [appname].exe.config. And anyway this file will contain only ApplicationScoped settings from settings.settins.
-
JMarsch almost 15 years@arbiter: Perhaps I missunderstood the question, but Adam appeared to be asking about the design-time defaults. Those are stored in app.config. At build-time, teh app.config file is copied to the build directory and renamed to (theapp.exe.config). However, if you edit that file directly (and are working in visual studio), you run the risk of the contents being overwritten the next time you build. Bottom line: For a deployed app (or if you are running outside the IDE), change teh name.exe.config file). If you are working in VS, change either the default value in settings, or app.config
-
jakdep almost 14 yearsThe folder for user scope settings on Vista and Win7 is C:\Users\username\AppData\Local\ApplicationName\Publisher\ApplicationName\Version or C:\Users\username\AppData\Roaming\ApplicationName\Publisher\ApplicationName\Version depending on the Roaming property value on Settings pane.
-
shen over 13 yearsunless its an addin, in which case it will be AppName.dll.config
-
Admin over 10 yearsIt looks like the My_Company component of the path will default to Microsoft. I've not yet found a way to change this that actually works, if someone knows that would be good to add.
-
Mal Ross almost 9 yearsAny idea what contributes to the hash in that path? Each subsequent release of my app is getting a different hash value, which makes calling ApplicationSettingsBase.Upgrade() futile. :/
-
arbiter almost 9 yearsHash is SHA1 hash of StrongName when app is signed or path when app is unsigned. More here msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
-
The Lonely Coder over 8 yearsMy local user.config on Windows 7 is in C:\Users\<username>\AppData\Local\Publisher\ApplicationName_Eid_EvidenceHash\Version
-
gg89 over 7 yearsuser565869, have you tried in visual studio, open the project property's application tab, click the assembly information button and you should then be able to change Company? repeat that for each project in your solution
-
UweBaemayr over 5 yearsUnfortunately the blog link is broken. I'm sure it would have been interesting.