2010-08-20 20 views
51

Che cosa fa realmente l'opzione di progetto VS "Registra per interoperabilità COM"? Perché quando costruisco la mia libreria con questa opzione abilitata posso chiamare CreateObject sulla mia libreria da VBScript. Ma se costruisco senza questo e poi eseguo il regasm manualmente, CreateObject fallisce. Quindi mi chiedo - cosa fa VS2010 che non sto facendo?Cosa fa in realtà "Register for COM Interop"?

risposta

50

Esegue la stessa operazione di esecuzione di Regasm.exe con le opzioni/tlb e/codebase. L'opzione/codebase è probabilmente quella che hai dimenticato. A Regasm piace presumere che tu inserisca la DLL nel GAC e generi un avvertimento quando non lo fai. Il GAC è davvero un ottimo modo per evitare l'inferno DLL, sempre un problema di COM. Ma non appropriato sulla tua macchina di sviluppo, non vuoi inquinare il GAC mentre sviluppi e collaudi il codice. Importa solo sul computer dell'utente, quello che è probabile che sia esposto a più versioni.

L'utilizzo della versione errata di Regasm.exe su una macchina a 64 bit è un altro modo per mettersi nei guai, di solito ci sono 4 versioni sul computer. Assicurati di distinguere tra le versioni a 32 e 64 bit (c: \ windows \ microsoft \ framework vs framework64), scrivono chiavi di registro diverse. Vuoi scegliere quello che è compatibile con l'app client. Usare entrambi è ok, il codice .NET può essere eseguito in entrambe le modalità, ma piuttosto insolito. E distinguere tra v2.0.50727 (da .NET 2.0 a 3.5SP1) e le versioni v4.0. Scegliere il giusto Prompt dei comandi di Visual Studio è metà della battaglia.

+3

Grazie! Stavo usando l'opzione/codebase ma apparentemente utilizzava la versione a 64 bit anziché a 32 bit. Ha usato esplicitamente la versione a 32 bit e ha funzionato come un fascino. – hackerhasid

+0

Si noti che l'utilizzo di entrambe le versioni è accettabile, il codice .NET può essere eseguito in entrambi i modi. –

Problemi correlati