I recently ran into some seemingly strange behavior as I was testing a couple windows services I had written.
In my case, I had a test harness program that was referencing the service (an exe) but this could also apply to references to dlls if you are using the projects application settings (My.Settings.Whatever in VB.Net).
After figuring it out, it all makes sense.
When you create an application setting by providing a value in the project’s “Settings” tab, the value is written out into a special <applicationSettings> block in your config file.
But, in order to make those values accessible via a strongly typed/intellisense method, a class is created to wrap those values. The class is in the Settings.vb file that is generated when you first add an application setting to your project.
But there is one more interesting thing to note: If the settings class doesn’t find the item it expects in the config file, it will return the last supplied value by default.
So what this means is that if create an application setting for XYZ for the value “123” and then change the app.config file directly to change the “123” to “abc”, then “abc” will be returned when you run the program. However, if you were to then alter the config file to remove or rename the XYZ item, then your application would return “123” again when it ran.
Also, if you directly modify the config file, and then try to edit the projects applications settings, it will alert you to the fact that some values have changed, and ask if you want to use the updated values from the config file. If you say yes, it will overwrite the Settings.vb file to use the new values that you had supplied in the config file.
So, I was referencing a project that used these settings, but when I would update the config file, those updated settings were not seen. All I had to do was go into the project settings tab, allow it to refresh the Settings.vb file, and rebuild the project.