Other answers already cover its essence.
Basically, the Framework checks the name, version, and signature of the assembly to find a match.
You can set the name and version (and much more!) From the code (AssemblyVersion attributes), and you can easily sign it also with VS.
The signature includes creating a .pfx file (VS will generate it for you) and checking the "icon assembly" in the build settings. This ensures that more than one assembly can coexist with the same name and version.
(So ββif two companies accidentally created two things with the same name, you can still use them together.)
source share