How to debug config files in .NET?
I've got a Visual Studio project that recently started throwing a ConfigurationErrorsException, and I can't figure out where it's coming from. I've hunted high and low, can't find anything like the error, and it doesn't appear for any of my teammates when they run the project on their PCs.
Does anyone have any specific advice on how to debug the loading and parsing of config files? Since the ConfigurationManager is framework code, I don't have the source and can't step into it with the Visual Studio debugger, so I'm hunting around in the dark.
I'd dearly love to be able at least to see which files are loaded, what sections, keys, etc. are retrieved, and what values are overridden when subsequent config files load.
Just FYI, the project is an InfoPath form project edited in Visual Studio 2008, using .NET 3.5. The exception happens when the form is first loading; a method tries to get a Web Service URL from the config file:
_clmWebSrvc.Url = System.Configuration.ConfigurationSettings.AppSettings["CLMUtilityWebServiceUrl"];
which fails (only for me!) with:
System.Configuration.ConfigurationErrorsException
The configuration section 'connectionStrings' has an unexpected declaration.
at System.Configuration.ConfigurationManager.get_ConnectionStrings()
I can't find a connectionStrings
section anywhere; there used to be a default one in machine.config
, but I removed it long ago as it caused conflicts in some of the web apps I maintain. There's nothing of the sort in Infopath.exe.config, nor in any other config file that would be in the inheritance chain. I stopped the separate web site I had running in local IIS. I reinstalled VS2008, InfoPath, cleared the InfoPath FormCache, renamed my user profile and restarted my PC, logged in as a totally different user, all to no effect.
As you can see, th开发者_开发知识库ese are all clumsy, desperate attempts to find out what config files affect the app. What I really want is a utility that will show me exactly what's being loaded. Is there any such animal?
Thanks!
Check out Process Monitor from System Internals (MSFT). You should filter it on your process, which will allow you to see what files it is trying to open, and where it is looking.
Then, you can also employ Red Gate .NET Reflector, which will let you step into .NET classes such as ConfigurationManager so that you can debug right down to the actual source of the exception being thrown.
A response but maybe not answer to your problem is to download the symbol files for .NET (which, of course, includes your Configuration assembly).
I can't remember if it's pre-filled in the Debug options in 2008, but here's a Hanselman post just in case: .NET Framework Library Source Code available for viewing
This error can be thrown if the connectionStrings section is missing.
Your mistake was removing the connectionStrings section from machine.config - some parts of the .NET Framework require this section to be present.
You should not manually modify machine.config. Instead, any apps that are having problems should use
<connectionStrings>
<clear/>
</connectionStrings>
which will clear any connection strings that have been defined in machine.config.
精彩评论