2012-03-02 23 views
7

Quiero usar algunas de las nuevas características de mshtml.dll versión 9.0 como IHTMLCSSRule.Cómo agregar una referencia a mshtml versión 9 en .NET

La versión de interoperabilidad en la siguiente carpeta es la versión 7.0.3300.1:

C: \ Archivos de programa \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll

El COM la versión en la carpeta siguiente es la versión 9.0.8112.16441:

C: \ Windows \ System32 \ MSHTML.DLL

Por lo que pude determinar a partir de la web, que debería hacer esto para crear una versión .NET de interoperabilidad 9:

d: \ Ztemp> tlbimp Mshtml.tlb /out:Microsoft.mshtml.dll/espacio de nombres : mshtml /asmversi en: 9,0

Esto parece haber funcionado, pero genera las siguientes advertencias:

TlbImp: TI3001 advertencia: ensamblado de interoperabilidad primaria 'Microsoft.mshtml, Versión = 7. 0.3300.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a 'ya está registrado para la biblioteca de tipos' C: \ Windows \ system32 \ mshtml.tlb '. TlbImp

: advertencia TI3016: El importador de la biblioteca de tipos no ha podido convertir la firma para el miembro 'mshtml._userBITMAP.pBuffer'. TlbImp:

advertencia TI3016: El importador de la biblioteca de tipos no ha podido convertir la firma para el miembro 'mshtml._FLAGGED_BYTE_BLOB.abData'. TlbImp:

TI3015 advertencia: Por lo menos uno de los argumentos para 'mshtml.ICanvasPixel ArrayData.GetBufferPointer' no se puede calcular las referencias por el contador de tiempo de ejecución. Por lo tanto, dichos argumentos pasarán como un puntero y pueden requerir código inseguro para anular. TlbImp: Tipo biblioteca importada en d: \ Ztemp \ Microsoft.mshtml.dll

  1. puede hacer caso omiso de estas advertencias?
  2. ¿No hay una versión precompilada de este archivo DLL disponible para descargar desde el sitio de Microsoft?
  3. ¿Puedo distribuir este dll con mi aplicación?
  4. Al añadir una referencia a la DLL para un proyecto .NET 3.5 se me dio la siguiente advertencia:

'Microsoft.mshtml.dll', o una de sus dependencias requiere una versión posterior de .Net Framework que el especificado en el proyecto ...

Como era una advertencia y permítanme agregar la referencia de cualquier forma, ¿puedo seguir usando ciertas características de .dll en .NET 3.5?

Gracias

Respuesta

4

Estos son los riesgos de control de versiones COM, también conocido como DLL Infierno. La PIA que ha instalado en el GAC es el denominador común más bajo, hace que su código funcione con cualquier versión de IE 6 y posterior. Tu enfoque es por lo demás sano. Las advertencias son reales, no puede usar los miembros marcados de un lenguaje de scripting o cualquier otro cliente que dependa de la automatización COM. Te mantienes fuera de problemas simplemente no usándolos, no es difícil.

Recibió el error cuando agregó la referencia porque utilizó la versión incorrecta de Tlbimp.exe. Probablemente la versión de .NET 4, a juzgar por el mensaje de error. La versión 3.5 compatible se encuentra en c: \ archivos de programa \ microsoft sdks \ windows \ v6.0a \ bin. De lo contrario, la que obtendrá cuando use el símbolo del sistema VS2008. Verifique escribiendo where tlbimp.exe en el símbolo del sistema.

Algunas probabilidades de que se cargue la PIA en lugar de su conjunto de interoperabilidad personalizado. No estoy seguro, se puede decir desde Fuslogvw.exe, configurado para registrar todas las vinculaciones. Tu/asmversion debería evitarlo. Es mejor crear un número de versión completamente falso para que nunca pueda coincidir con una versión de PIA, como 1.0.0.0

Y, por supuesto, su programa no funcionará en la máquina del usuario cuando no tenga IE9 instalado.

Cuestiones relacionadas