No PIA Office development and Borland nostalgia

Otra de las nuevas características que aparecerán en Visual Studio 2010 para simplificar el desarrollo de aplicaciones que acceden a las librerías COM de Microsoft Office es la que se conoce simplemente como “No PIA“. La idea básica es la de que podamos librarnos de la necesidad de distribuir los ensamblados PIA (Primary Interoperability Assembly) correspondientes a las librerías COM que componen la suite Office con nuestras aplicaciones. En principio, esta tecnología podrá aplicarse en el futuro a cualquier otro componente COM. En este post mostraremos de manera práctica cómo funciona esta característica en VS 2010 CTP.


Supongamos que hemos creado la aplicación que utiliza la librería nativa de Word para crear un documento RTF que hemos presentado en un post anterior. Para compilar esa aplicación, fue necesario agregar una referencia al ensamblado de interoperabilidad, como muestra el Explorador de soluciones:


Figura 1


Si lanzamos Red Gate Reflector y estudiamos el ejecutable resultante, no veremos nada especialmente interesante:


Figura 2


Pero vayamos ahora al Explorador de soluciones, seleccionemos el ensamblado Microsoft.Office.Interop.Word, y en la ventana de Propiedades cambiemos a true el valor de Embed Interop Types.


Figura 3


Después de recompilar la aplicación y refrescar la vista de Reflector, veremos lo siguiente:


Figura 4 


Básicamente, la idea que subyace a No PIA es la embeber los tipos necesarios para comunicar con la librería nativa en nuestro propio ensamblado, en vez de generar un ensamblado de interoperabilidad o utilizar el PIA suministrado por el fabricante.


Al activar esta característica, deja de ser necesario el ensamblado de interoperabilidad, que no habrá que distribuir con nuestra aplicación ni cargar en memoria durante su ejecución. Pero aún hay más: como puede deducir de la imagen, los únicos tipos y métodos que se incorporarán a nuestro ensamblado son aquellos que nuestra aplicación necesita, lo que puede representar un enorme ahorro de espacio y tiempo de carga.



El bit nostálgico: Este post me ha traído a la mente una característica con ciertos tintes de similitud (el enlace selectivo de únicamente las características necesarias de una librería) que ofrecían los compiladores de Borland hace muchos años, y que se dio en llamar entonces “smart linking“. Esta no es la única vez que, revisando las novedades de VS 2010 y C# 4.0, me vienen recuerdos de aquellos tiempos: con la nueva palabra reservada dynamic, me parece (y creo que no solo a mí) que C# está repitiendo la historia de Delphi.

Octavio Hernandez

Desarrollador y consultor en tecnologías .NET. Microsoft C# MVP entre 2004 y 2010.

Un comentario en “No PIA Office development and Borland nostalgia

  1. Hola espinete,

    a) Normalmente sí, porque los PIA se instalan como parte de la instalación de Office. Pero en principio, Office no tendría por qué estar instalado. Pero claro, sin Office instalado en la máquina de desarrollo no podrías probar tu aplicación.

    b) Claro, el ensamblado de interoperabilidad se carga, y (si no le estaba ya) el correspondiente ensamblado no manejado también.

    c) La aplicación fallaría: imposible cargar librería COM.

    d) Normalmente he visto comprobar si Office está instalado consultando el Registro, donde Office crea una clave del tipo HKLMSoftwareMicrosoftOfficeX.Y, pero puede que haya otras vías (la última de ellas, encerrar tu código en un try/catch y reccionar ante el error correspondiente).

    e) Puedes encontrar muchos ejemplos en el Centro de Desarrollo con VSTO de MSDN:

    http://msdn.microsoft.com/en-us/vsto/default.aspx

    Salu2 – Octavio

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *