2010-08-20 29 views
51

¿Qué hace exactamente la opción del proyecto VS "Registrarse para interoperabilidad COM" en realidad? Porque cuando construyo mi biblioteca con esta opción habilitada, puedo llamar a CreateObject en mi biblioteca desde VBScript. Pero si construyo sin esto y luego ejecuto regasm manualmente, CreateObject falla. Entonces me pregunto: ¿qué hace VS2010 que no estoy haciendo?¿Qué significa en realidad "Registrarse para la interoperabilidad COM"?

Respuesta

50

Hace lo mismo que ejecutar Regasm.exe con las opciones/tlb y/codebase. La opción/codebase es probablemente la que olvidaste. A Regasm le gusta asumir que coloca el archivo DLL en el GAC y genera una advertencia cuando no lo hace. El GAC es de hecho una muy buena manera de evitar DLL Hell, siempre es un problema COM. Pero no es apropiado en su máquina de desarrollo, no quiere contaminar el GAC mientras desarrolla y prueba el código. Solo importa en la máquina de su usuario, la que probablemente esté expuesta a múltiples versiones.

El uso de la versión incorrecta de Regasm.exe en una máquina de 64 bits es otra forma de meterse en problemas, generalmente hay 4 versiones en su máquina. Asegúrese de distinguir las versiones de 32 bits y de 64 bits (c: \ windows \ microsoft \ framework vs framework64), escriben diferentes claves de registro. Desea elegir el que sea compatible con la aplicación del cliente. Usar ambos también está bien, el código .NET se puede ejecutar en cualquier modo, pero es bastante inusual. Y distinga entre la v2.0.50727 (.NET 2.0 a 3.5SP1) y las versiones v4.0. Elegir el símbolo del sistema de Visual Studio correcto es la mitad de la batalla.

+3

¡Gracias! Estaba usando la opción/codebase pero al parecer estaba usando la versión de 64 bits en lugar de la de 32 bits. Utilizó explícitamente la versión de 32 bits y funcionó como un amuleto. – hackerhasid

+0

Tenga en cuenta que el uso de ambas versiones es aceptable. El código .NET puede ejecutarse de cualquier manera. –

Cuestiones relacionadas