I’ve had this problem for as long as I can recall. My page inspector in Visual Studio 2012 never worked… which normally would have been ok, since I could always do the old-school edit+save+refresh routine… but when you know that the feature exists, it is a bugger that it doesn’t work.
I tried everything, from disabling all my extensions and add-ons, to hooking up a debugger to my devenv process… to the obvious google-and-bing-fu manic searches… but got nothing.
If you check your ActivityLog.xml, you will see that Page Inspector is blowing up with a NullReferenceException… no surprise there.
After installing VS2013 I hoped that all of this would go away, but I got the same error.
Finally, I had the great brain wave of setting Internet Explorer as my default browser and restarting Visual Studio (I’m a chrome user).
…and voilà… page inspector finally works :(
One would think that by this time, this whole thing about being wired-in to Internet Explorer was a thing of the past… clearly it is not.
Being an overly pedantic developer, I was annoyed that my ASP.NET MVC project was always silently throwing this exception on startup. So I dug into the guts of System.Web.dll to find out ‘why’ this exception was being thrown.
It turns out that upon startup, ASP.NET tries to create the CultureInfo for the project by looking for the good old Satellite directories… so far, so good, this makes total sense.
The issue is more about HOW this is done.
The System.Web.Compilation.StandardDiskBuildResultCache class calls its internal FindSatelliteDirectories method.
This, in turn, fetches all the folders (a.k.a. Directories) that it finds in the Temporary ASP.NET files temp folder, and iterates over them to see if any of them are Satellite Directories.
There is a conditional statement to bypass this check if the folder is called ‘assembly’ or ‘hash’, yet it fails to check if the folder is called ‘UserCache’, which also definitely not a satellite folder.
Personally I think this is bad design in the first place, since:
Satellite folders have a predictable naming convention
Why check for what it is not rather than what it is?
What happens if the developer decides to throw in another 5 folders? This would be an extra 5 exceptions being thrown… and nobody likes the computational cost of exceptions.
I really wish Microsoft would fix this… until then, we’re going to have to live with seeing a bunch of ‘System.Globalization.CultureNotFoundException’ on startup :(
Note: the System.Web.dll that I am checking is v4, and the one that comes with .NET Framework v4.5