I've been looking into a tricky requirement today...

Two applications have been developed over time using a number of COM components that were initially shared, however over time breaking changes to these COM components have been made in isolation which has resulted in making them incompatible with the other version (and they unfortunately still use the same GUIDs)

The bottom line is that both applications won't run together on one box (an all too often occurence I find), and the codebase is too complicated/scary to rework the component creation code.

They're looking to migrate to .NET gradually over the coming year and were hoping that they could use some of the funky side by side (SxS) functionality in .NET to help them out.

I started off by digging around the .NET side by side technology (which is really impressive), assembly manifests, etc. and was chatting to my colleague Morgan who found this gem of an article which details the DLL/COM Redirection SxS technology introduced circa 1999!!

It works a treat, you stick all the COM components used by the application in the same directory as your app and create an empty file called <YourApplicationName>.exe.local in the same directory.

This activates the DLL/COM redirection plumbing,  If a version of the component is found in the local directory, the application will use it regardless of any directory path specified in the application or the registry!

This also works for DLLs used by your application (LoadLibrary, etc.)