.NET prevents DLL Hell by allowing assemblies to specify both the name AND exact version of their dependencies in the manifest. This ensures that an application loads the specific versions of assemblies it was built and tested against, rather than whatever arbitrary version happens to be present. The runtime can then enforce versioning policy and redirect binding if configured.