With DLL I understand that with the compatibility issue, you just send the DLL and then the system by itself informs you that there is a new DLL and asks if you want to change the DLL.

But what about with COMs, when you distribute it, or compile it for that matter, in the Project -> Reference, you would get two instances of the COM or DLL that you have created (I know why, because of the reason of maintaining older versions used by other applications), but the question is, if it maintains itself with the GUID and all that internal stuff, how do you tell the old program to access the new COM and not the old one?