Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When is an app.config created, when an app.exe.config and what is the difference

We have created a WinForms application and store some configurations via the ConfigurationManager class. In order to store the information I use

Configuration pConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); pConfig.AppSettings.Settings.Add("updates", szUpdatesURL); pConfig.Save(ConfigurationSaveMode.Modified); 

The problem here is that in some occasions the application creates an "appname".config file and in other occasions an "appname".exe.config.

Here I must note that a configuration file is not shipped by default since it is not always required.

The configurations are saved the first time the program is executed. This has caused us a problem, and I cannot specify the occasions when which one or the other is created.

I have performed the tests, on the same pc, with the exact same .exe and I get both results. What's going on here?

What is the difference between the two, and how can I specify which one should be created? Many thanks

like image 839
Nikos Steiakakis Avatar asked Jan 31 '10 20:01

Nikos Steiakakis


Video Answer


1 Answers

The "appname.exe.config" is automatically created for you when you compile your application. This is the file that should be distributed to your end users (along with the exe file, of course). The settings you set in appname.config is transferred over to appname.exe.config. They are essentially the same files. The reason appname.config exists is because when the executable is run, it's config file is simple the executable's name with a .config suffix. However, if the executable's name changed, you would have to change the name of the exe.config file manually. Therefore, by automatically renaming at compile time, the app.config can change it's name to newappname.exe.config file and the CLR will still pick it up. You'll probably find that the appname.exe.config file is created in the bin directory. I hope that's clear :) The links below may explain it in slightly more depth.

There's a good explanation here. Another good read is on CodePlex.

like image 71
keyboardP Avatar answered Sep 22 '22 00:09

keyboardP