I'm using registration free COM to access the .NET interop assemblies.
Basicly first you have to create assembly manifest with mt.exe
and optionally re-sign strong names with sn.exe
like this
mt.exe -managedassemblyname:{Your_DLL} -nodependency -out:{Your_DLL}.manifest
mt.exe -manifest {Your_DLL}.manifest -outputresource:%{Your_DLL};1
sn -Ra {Your_DLL} {Your_PFX}
Then reference this assembly manifest in your application manifest like this
<dependency>
<dependentAssembly>
<assemblyIdentity name="{Your_DLL}" version="1.0.0.0" publicKeyToken="hash_here" processorArchitecture="x86" />
</dependentAssembly>
</dependency>
where assemblyIdentity
matches assemblyIdentity
in assembly manifest of {Your_DLL}.
On client machines both the VB6 executable and .NET dll must be in the same folder. No regasm and no GAC registration needed.
I'm using UMMM tool to automate the manifest creation process but you can do it manually if it's a one time setup.