I'm wondering what is the magic behind .settings files in .NET.
Imagine you create an assembly called in this example SettingsHolder
, you create your settings class which is public with a string inside in user mode , then you compile.
Now you reference your assembly in MyApp, you compile then you can change the value in your application of your setting with the settings class generated in SettingsHolder
and persist them.
Now go in the output directory of MyApp and there is no trace of your setting (nothing in the application configuration file, nothing in the assembly, nothing !).
What is going on?! (I have tried to source step debug in .NET source, and reflector to see what is happening, .NET seems to use LocalFileSettingsProvider
(but it seems weird to me because there is nothing in MyApp.exe.config
in the output directory).
On OS >= Vista I will claim the the user-setting file it's located here:
The setting files are stored in a different place for each user. To find them, click the start menu, click run, and paste:
and press enter. There will be a folder with your "Company Name" (whatever it is set to in your assembly) and then some more subfolders. The settings are stored in user.config.
Full path:
In Windows Vista and newer, these are stored under:
More info:
The settings file is contained inside the compiled assembly.
Edit:
Just to clarify a bit. The code to
get
andset
the settings from the file are compiled into the assembly. The values themselves are moved intoProgram.exe.config
whereProgram
is the name of your application. Reflector will let you see the code that gets and sets the value including the hard-coded key to the config file. The config file itself will show you the value and allow you to change it after the application has been built.