giovedì 29 maggio 2014

Come registrare una libreria COM scritta in .NET

Dopo aver migrato dei controlli ActiveX da C++ a C#, ho speso diverso tempo prima di riuscire a registrare correttamente la libreria dll in .NET su un PC che non fosse quello di sviluppo.
Il comando che usavo:

RegAsm.exe mypath\mydll.dll

fa sì che il sistema operativo cerchi la libreria mydll nella GAC (global assembly cache).
La mia applicazione referenzia l'instanza di mydll contenuta nella stessa cartella di lavoro, e perciò non la trova.
Per far sì che mydll venga referenziata correttamente bisogna aggiungere lo switch /codebase:

RegAsm.exe /codebase mypath\mydll.dll

Il parametro codebase registra mydll con l'intero path, rendendola accessibile da qualunque locazione.

Per distribuire correttamente la libreria con InnoSetup:

[Run]
Filename: "{dotnet40}\RegAsm.exe"; Parameters: /codebase mydll.dll; WorkingDir: {app};