2011-08-08 17 views
5

I construyó una aplicación, genera Excel con interoperabilidad COM. Funciona bien en la mía y la máquina de nuestro usuario: Office 2007, Windows XP SP2. Ahora lo migro a otra máquina, Office 2010, Windows 7 de 64 bits, y uso Visual Studio 2010 desde VS2008, que todavía funciona bien. Cuando lo despliego en la máquina de mi usuario, tengo el problema, usan el mismo Windows 7 de 64 bits pero Office 2007.Office 2007 PIA

Así que si instalo Office 2007 PIA en mi Win7 de 64 bits y la máquina de Office 2010, cambie la referencia en mi proyecto de estudio visual, ¿eso resolverá el problema?

+3

¿Problema? *¿Qué problema? –

+0

¿Qué sucede si hace clic en cada ensamblaje de oficina y activa "Tipos de interoperabilidad incrustados"? Creo que esto elimina la necesidad de preocuparse por dónde están los archivos PIA o qué versión está siendo utilizada. –

Respuesta

9

Sé que este mensaje fue un tiempo atrás, pero pensé que había que tirar en mis dos centavos de todas formas, en caso de que alguien se tropieza con ella.

Una regla general es utilizar la versión del PIA en el desarrollo que enlaza con la versión más antigua de oficina va a apoyar. Por lo tanto, si va a admitir Office 2007 en adelante, use la versión 12 de los PIA durante el desarrollo.

Agregue una referencia a los PIA v12 (ya sea descargando los PIA 2007 en línea, a través de VSTO, o desde el GAC si anteriormente ya tenía Office 2007). Ahora podría pensar "Ok, estoy haciendo referencia a v12 en Visual Studio, esto ahora debería funcionar en Office 2007". Incorrecto. Puesto que usted está haciendo referencia v12, pero usted tiene Office 2010 instalado, durante el montaje de unión a su máquina va a decir: "Bueno, se solicita V12, V14 pero hemos instalado en la GAC ​​y desde los PIA son compatibles con las versiones, usaremos eso". Aunque explícitamente le diga que use v12, después de completar una compilación su máquina usará v14. Puede confirmarlo a través del FUSLOG. FUSLOG es una herramienta excelente para usar cuando se trabaja con uniones de ensamblaje. Nota: Si usted no está viendo nada en FUSLOG y que cree que debería, claro todo en el historial de Internet Explorer y vuelva a intentarlo.

Para solucionar este problema, debe detener lo que se llama 'assembly binding redirection'. Estas PIA usualmente tienen un archivo de política con ellos en el GAC. El objetivo del archivo de política es redirigir las versiones anteriores de PIA a las versiones más nuevas al resolver el ensamblaje. Para ver esto, haga lo siguiente:

  1. Prensa 'tecla de Windows + R' para abrir el menú de ejecución.
  2. Tipo 'C: \ Windows \ Assembly \ GAC' y pulse Enter. Nota: Estoy funcionando una máquina de 32 bits. Es muy probable que sus PIA se instalen en una ubicación diferente en el GAC, como 'C: \ Windows \ Assembly \ GAC_MSIL'.

Una vez en el GAC, desplácese hacia abajo y busque las carpetas de los PIA a los que hace referencia (por ejemplo, Microsoft.Office.Interop.Excel). Si continúa desplazándose, debería ver las carpetas que comienzan con 'Política', luego un número y luego el nombre de la PIA (por ejemplo, Policy.12.0.Microsoft.Office.Interop.Excel). Este es el archivo de política que realiza la redirección de enlace. Abrir el archivo de configuración XML dentro de esa carpeta y verá algo similar a lo siguiente:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

En el código anterior, la etiqueta "bindingRedirect OldVersion ..." es responsable de la Redirección de ensamblaje PIA.Si usted comenta que código como el siguiente:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>--> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

A continuación, se ignorará esta redirección. Lo comento en lugar de eliminar simplemente porque el archivo sirve para un buen propósito, pero no cuando se desarrolla para versiones anteriores de Office. Realice esto en cada archivo de Política PIA que necesite, y su máquina de desarrollo detendrá la redirección.

¡Espero que esto responda a su pregunta!

+1

¡Esta es una información importante! Tuve muchos problemas con la implementación de mi aplicación porque no me di cuenta de la raíz del problema. Visual Studio siempre mostró la Versión 11 original en el nombre de referencia, aunque la compilación se redirigió, como se describe anteriormente y en https://msdn.microsoft.com/en-us/library/2fc472t2%28v=vs.100%29.aspx. – DrMarbuse

Cuestiones relacionadas