2012-06-19 11 views
6

Primero tengo un control ActiveX de terceros que necesito usar.No se pueden silenciar las advertencias de interpolación incrustada

Siguiente Tengo que usar la biblioteca stdole para alimentar a ese tercero y controlar algunas imágenes. Cuando compilo en la configuración por defecto, consigo algunas advertencias:

warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 

bastante fácil, voy a seguir ese consejo y configurar los tipos de interoperabilidad Insertar en false para la referencia stdole. Todo se ve bien hasta que me vaya a la máquina cliente ahora, cuando de repente la aplicación está vomitando esto:

Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

lo tanto, supongo que no va a pasar (aunque no estoy seguro de por qué la eliminación de interoperabilidad: Insertar en el stdole tiene el efecto de hacer que la biblioteca no pueda ser compartida por completo).

Bueno, vamos por el otro lado y marcamos todo con Incrustar Incrustar verdad. ¡OOPS! Error de compilación:

Error 2 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 
Error 1 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 

Por lo tanto, cualquier consejo sobre cómo deshacerse de las advertencias y tienen algo que puede ser construido y dirigido?

ACTUALIZACIÓN

Hans Passant publicado como comentario una respuesta que efectivamente resolver el problema. Si lo vuelve a publicar como una respuesta, lo aceptaré. Desafortunadamente, también estoy teniendo el problema estándar donde el archivo DLL que está configurado para copiar local está muy bien copiado en la carpeta de lanzamiento de su proyecto, pero luego no se moverá a la carpeta de lanzamiento final de la solución (un ejecutable por separado). Lo he resuelto por ahora agregando una referencia a stdole en mi ejecutable. Supongo que probablemente sea lo suficientemente bueno.

+3

No puede incrustar tipos para un componente ActiveX. La máquina de destino no tiene el PIA para stdole, intente configurar la propiedad Copy Local en true y copie el stdole.dll generado también. –

+0

Hans Passant nuevamente! Estás en todas partes, incluso me encontré contigo en un asunto no relacionado el día de hoy. No sé por qué Jon Skeet recibe toda la prensa. Lo probaré e informaré. – user12861

+0

@HansPassant ver la actualización a la pregunta – user12861

Respuesta

3

respuesta por Hans Passant:

no puede incrustar tipos de un componente ActiveX. La máquina de destino no tiene el PIA para stdole, intente configurar la propiedad Copy Local en true y copie el stdole.dll generado también.

-2

Si crea un nuevo proyecto en VS10, puede usar el perfil de cliente de .NET framework 4 como predeterminado, puede establecer el marco de destino en .NET Framework 4 en página de pestaña -> Solicitud.

Cuestiones relacionadas