This is one of the breaking change mentioned in gotdotnet.com's break change from .Net 1.1 to 2.0
Cache load failures in order to ensure that different app domains do not have different dependency loading success/failure characteristics in domain neutral sharing scenarios
What does it mean?
Say you call Assembly.Load(”Foo, version=188.8.131.52, culture=neutral, publicKeyToken=0123456789abcdef”), you get a FileNotFoundException. You realize that foo.dll should be in GAC but you forget to install it. So you install it (using gacutil.exe or some other mechanism) to GAC. Now you call Assembly.Load(“Foo, version=184.108.40.206, culture=neutral, publicKeyToken=0123456789abcdef“) again.
In v1.0/v1.1, the second load will succeed. In Whidbey, the second load will fail.
Installing to GAC is just an example. As long as the first bind failed, the second bind will fail with exactly the same exception.
The caching is done on per AppDomain basis. If you create a new AppDomain and call Assembly.Load() on that app domain, it will succeed.