Registrazione di assembly presso COM
È possibile eseguire uno strumento da riga di comando denominato Assembly Registration Tool (Regasm.exe) per registrare o annullare la registrazione di un assembly per l'uso con COM. Regasm.exe aggiunge informazioni sulla classe al Registro di sistema, così che i client COM possano usare la classe di .NET Framework in modo trasparente. La classe RegistrationServices fornisce funzionalità equivalenti.
Un componente gestito deve essere registrato nel Registro di sistema di Windows per poter essere attivato da un client COM. La tabella seguente mostra le chiavi che Regasm.exe aggiunge in genere al Registro di sistema di Windows. 000000 indica il valore GUID effettivo.
GUID | Descrizione | Chiave del Registro di sistema |
---|---|---|
CLSID | Identificatore di classe | HKEY_CLASSES_ROOT\CLSID\{000…000} |
IID | Identificatore di interfaccia | HKEY_CLASSES_ROOT\Interface\{000…000} |
LIBID | Identificatore di libreria | HKEY_CLASSES_ROOT\TypeLib\{000…000} |
ProgID | Identificatore a livello di codice | HKEY_CLASSES_ROOT\000…000 |
Nella chiave HKCR\CLSID\{0000…0000} il valore predefinito viene impostato sull'oggetto ProgID della classe e vengono aggiunti due valori denominati, Class e Assembly. Il runtime legge il valore di Assembly dal Registro di sistema e lo passa al resolver di assembly di runtime. Il resolver di assembly cerca di individuare l'assembly, in base alle informazioni sull'assembly come il nome e il numero di versione. Affinché il resolver possa individuare un assembly, l'assembly deve trovarsi in una delle posizioni seguenti:
Global Assembly Cache (l'assembly deve avere un nome sicuro).
directory dell'applicazione. Gli assembly caricati dal percorso dell'applicazione sono accessibili solo da tale applicazione.
Percorso specificato con l'opzione /codebase in Regasm.exe.
Regasm.exe crea anche la chiave InProcServer32 nella chiave HKCR\CLSID\{0000…0000}. Il valore predefinito per la chiave è impostato sul nome della DLL che inizializza Common Language Runtime (Mscoree.dll).
Esame delle voci del Registro di sistema
L'interoperabilità COM fornisce un'implementazione di class factory standard per creare un'istanza di qualsiasi classe .NET Framework. I client possono chiamare DllGetClassObject sulla DLL gestita per ottenere una class factory e creare oggetti, esattamente come accade con qualsiasi altro componente COM.
Per la sottochiave InprocServer32
, viene visualizzato un riferimento a Mscoree.dll al posto di una libreria dei tipi COM tradizionale per indicare che Common Language Runtime crea l'oggetto gestito.