27

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.

Community
  • 1
  • 1
Ben McCormack
  • 32,086
  • 48
  • 148
  • 223

1 Answers1

34

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
  • 922,412
  • 146
  • 1,693
  • 2,536
  • 2
    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 Jun 21 '10 at 18:12
  • 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 Jun 21 '10 at 18:22
  • 1
    To answer Ben's question in his comment, using vsdrpCOM *will* automatically create and register the .tlb file. – Keith May 18 '11 at 17:10
  • So what You are saying is that just setting register property to vsdrpCOM does exactly the same as the whole long solution in here? http://stackoverflow.com/questions/239465/how-to-register-a-net-ccw-with-regasm-from-a-visual-studio-2008-setup-project/1883517#1883517 if so, then absolutely brilliant! – rank1 May 20 '14 at 15:50
  • To conifrm: to make the Regasm automatic both steps from Hans Passant answer needs to be done. – rank1 May 22 '14 at 13:27
  • I got tlb generated only into the Debug folder. What might be the reason? Everything works fine under Debug installer, under release there is no .tlb file generated by installer – rank1 Jun 24 '14 at 16:22
  • Thanks @Hans, it really saved me today, was unable to figure out why the COM interop dll is not working after making installer. – Ehsan Sajjad Feb 17 '19 at 15:10