I ran into this problem today.
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.
The issue is more about HOW this is done.
The System.Web.Compilation.StandardDiskBuildResultCache class calls its internal FindSatelliteDirectories method.
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