Sometime you’re searching for something forever and when you find it, you realize it was right under your nose. Maybe you were distracted by other things around… or maybe that thing right under your nose was so well hidden that it deserves a blog post… That happened to me a few days ago while using the “Settings.settings” functionalities in my VB.NET application… I thought it was a cool feature and I decided to use it…
So there I am adding new settings with “USER” scope and StringCollection as the data type, testing my application and everything works perfectly fine... That was before I decided to modify the “Value” of one of my settings… After changing the value of one of my settings, I start my application again and, to my surprise, my new values aren’t showing! Hmmm… That’s odd… My setting was a pretty long list of strings so I was rather angry at myself for not saving my work after I was done… So I open up the Settings.setting in the designer and click the ellipsis symbol to enter my string collection again, but to my great pleasure (and disbelief) my strings are there!!! Alright, you rock VB.NET! You’ve just save me a bunch of typing time and I’m thinking it’s just a simple Visual Studio glitch… I hit “Save” then “Save All” (just in case) and finally I rebuild everything and fire up my app once again. Huh? Where are my darn strings???????? Ok there’s a bug there… I open up the app.config and my new strings are there!!! Alright, let’s recap… My new strings are in the app.config, they show correctly in the Settings.settings designer UI but they aren’t showing at runtime… Hmmmm? Let’s try something else… Let’s start the application but outside Visual Studio this time… I fire up the exe and BAM! My strings where there! I “alt-tab” and hit “F5” and BOOM, no strings! So it’s a bug in the Visual Studio environment… or could it be a FEATURE? I must admit that I’m a little confused over what’s a bug and what’s a feature in Visual Studio… lol! Finally I found out there’s a “cache” for your Visual Studio located here:
C:\Users\<your username>\AppData\Local\Microsoft\<your app name and a very weird temp ID>\<your app version>\user.config
When using the “Settings.settings” with a setting of scope “user”, this file is out of sync with your app.config until you manually decide to update it… The button is right there… under your nose… at the top left corner of your screen in the settings designer… See the big “Synchronize” button there? Yep… Now that’s user friendly isn’t it? Oh, and wait until you see what it does when you click it… It prompts you and basically says: “Would you like your settings to start working inside Visual Studio now that you found out that I exist?” and of course the right answer is yes… or rather “OK”… Unfortunately, you have to do this every time you edit a value… On the other hand, adding and removing settings seem to work flawlessly without having to click this magical button… go figure! Oh and I almost forgot… this great “feature” is only available for VB.NET… A project in C# using Settings.settings will work perfectly EVEN when editing values…
Here’s a screenshot that shows this important button:
Button
Using other data types appears to work perfectly well… Maybe it’s simply related to the StringCollection data type? If you are a VB.NET programmer, you should pay attention to this when you plan on using the settings functionalities and your scope is “user” and your data type is StringCollection…
Happy coding all!