views:

952

answers:

1

I've created a .NET assembly for COM interop and it is working well on my development machine. I'm currently trying to figure out how to deploy the DLL to a target machine using Visual Studio's "Setup Project." How can I use the VIsual Studio setup project to do the following things:

  • Register the assembly (currently using regasm).
    • The assembly needs to be registered successfully and the type library (.tlb) needs to be registered successfully.
    • This answer suggests scrapping regasm in favor of custom code. I this is a good idea? If so, how does this code get included in the setup project?
    • This answer suggests using the /regfile command of regasm and then using the import tool on the Registry in the Setup Project. Will this work?
  • Install the assembly in the GAC (currently using gacutil)
    • I'm aware of the "Global Assembly Cache Folder" in the "File System on Target Machine." Is there anything special I need to do in including the assembly in the setup project?

Any other advice or concerns would be much appreciated.

+2  A: 

Gacutil.exe won't be available on the target machine. Not a problem, MSI can get the job done. Right-click "File System on Target Machine", Add, GAC. Right-click that added folder, Add, Project Output. That ensures the assembly is gac-ed.

It can also register the assembly like Regasm.exe does. Set the Register property of the project output reference to vsdrpCOM.

Hans Passant
@Hans Will the register property being set to `vsdrpCOM` automatically create and register the .tlb file as well? If not, how do I include the .tlb in the set up project (it doesn't seem to like being shared in the GAC folder in the setup project)?
Ben McCormack
Type libraries are for compilers, they are not needed at runtime. Is the your customer actually going to use your component in his own program? If so, just copy the .tlb file, no need to recreate it.
Hans Passant
@Hans That's a great point. I got so used to typing `regasm /tlb...` that I just assumed I would need it, but you bring up a great point - the client machine's won't be writing code against these assemblies. Much thanks.
Ben McCormack