foo.exe and foo.dll

So that I got a complain today about foo.exe and foo.dll.

The whole story is like this: The tester produces two binaries foo.exe and foo.dll, with the same identity (name, version, culture, public key token). And the tester uses gacutil to install both of them. Gacutil -i foo.dll, then Gacutil -i foo.exe. He finds foo.exe overwrote foo.dll. How shocking it is!

Well, this is by design. In fusion world, identity is what uniquely identity an assembly, not file name. If two files with different file names, but with the same identity, fusion will think they are the same. This is what we saw in my post “Binding context and LoadFrom”.

So what happened is when you call Gacutil -i foo.exe, we found this assembly (remember, we are talking about assembly identity really) already exists in GAC, so we remove the old one, and put the new one in.

Remember, in fusion world, assembly identity matters, file name does not.