2010-03-15 25 views
16

Estoy tratando de agregar una DLL COM de VC6 a nuestra solución VS2010RC C#. La DLL se compiló con las herramientas de VC6 para crear una versión x86 y se compiló con las herramientas multiplataforma VC7 para generar una DLL VC7.Visual Studio 2010 64-bit COM Interop Issue

La versión x86 del ensamblaje funciona bien siempre que la plataforma del proyecto C# consumidor esté configurada en x86. No importa si la versión x64 o x86 de la DLL está realmente registrada. Funciona con ambos. Si la plataforma está configurada en 'Cualquier CPU', recibo un BadImageFormatException en la carga del Interop.<name>.dll.

En cuanto a la versión x64, ni siquiera puedo obtener el proyecto para compilar. Recibo el error tlbimp:

TlbImp : error TI0000: A single valid machine type compatible with the input type library must be specified.

¿Alguien ha visto este problema?

EDIT:

que he hecho mucho más la excavación en este tema y que esto puede ser un error de Visual Studio. Tengo una solución limpia. Traigo mi ensamblado COM con el idioma 'Cualquier CPU' seleccionado. La arquitectura de proceso del DLL Interop resultante es x86 en lugar de MSIL.

Puede que tenga que hacer manualmente la interoperabilidad por ahora para que esto funcione.

Si alguien tiene otra sugerencia házmelo saber.

Respuesta

47

Este problema se puede resolver mediante la apertura del archivo csproj y añadiendo el siguiente nodo a cualquiera de los '(Configuración) | Cualquier CPU' nodos que faltan que:

<PlatformTarget>AnyCPU</PlatformTarget> 

Si este nodo no está presente TlbImp se establecerá de manera predeterminada en x86 y causará problemas.

+0

Ojalá pudiera volver a votar esto un par de veces más. Es obvio lo que significa el error en retrospectiva, pero desconcertante a primera vista. – xcud

+0

Funcionó, pero necesitaba agregar elemento en el archivo CSProj para que VS pueda comenzar a utilizar realmente esta configuración. – Roboblob