2009-07-01 8 views
5

Ho Office 2007 sulla mia macchina di sviluppo. Ho una piccola app che sto costruendo per un server cliente con Office 2003 che deve fare un po 'di interoperabilità. Il mio programma verrà eseguito come attività pianificata in un processo batch notturno.Interop di Office: sviluppo con PIA 2003 su una macchina con Office 2007

Non importa quello che faccio, non riesco a trovare la versione 11.0 dell'assembly di interoperabilità di Access in modo che funzioni sul server.

Ho provato a scaricarli e installarli esplicitamente sulla mia macchina. Ho provato a installare gli assembly di interoperabilità 2007 sul server (un'installazione completa di Office 2007 è fuori questione). Ho provato diversi riferimenti COM diversi. Ho provato a cercare l'oggetto COM sul server per fare riferimento nel progetto di Visual Studio. E ho provato troppe altre piccole cose per elencarle tutte qui.

Cosa sta succedendo qui? Come posso farlo funzionare?

+0

Presumo che abbiate selezionato C: \ WINDOWS \ assembly \ GAC \ Microsoft.Office.Interop.Access? –

+0

Sì, l'ho fatto. –

+0

Non conosco l'ambiente in cui si sta programmando, ma è necessario utilizzare l'associazione anticipata? Non esiste una forma di associazione tardiva che potresti utilizzare che sarebbe indipendente dalla versione di Office? –

risposta

1

Ho trovato l'unico modo per farlo, anche con entrambe le versioni installate fianco a fianco, in. Net v2 e versioni successive, era necessario aggiungere un riferimento al PIA (piuttosto che alla libreria COM). Frameork v1.1 sarebbe effettivamente associato alla versione corretta, se fossero presenti fianco a fianco.

+0

Non riesco a trovare il file PIA da nessuna parte. –

+0

Okay: sono un idiota.Non sono riuscito a trovare il file nel GAC del server, ma la versione 2007 (e solo la versione 2007, anche se ho installato esplicitamente i PIA del 2003) è nel mio GAC locale. Sfortunatamente, questo non funziona ancora sul server e si blocca solo quando provo ad aprire il file Access. Ma questa è una domanda completamente diversa –

+0

Devo ammettere che per ottenere i PIA in primo luogo, li abbiamo estratti dal GAC (i PIA di Office XP erano inclusi in un bel ZIP che li rendeva più facili da reperire). Non sono sicuro delle implicazioni della licenza, ma potresti affiancare il PIA? (ovviamente ci sarebbe ancora bisogno dell'accesso) –

0

Non è possibile copiare il PIA dal server alla macchina (in una cartella locale) e quindi aggiungere un riferimento a tale copia?

Se ti piace andare in un altro modo, puoi evitare di utilizzare i PIA e utilizzare invece ComImport. Andrew Whitechapel ha i dettagli nel suo blog:

Add-ins for Multiple Office Versions without PIAs

aggiornamento (da commentare): Se non è possibile individuare il PIA Access sul server si potrebbe provare la seguente:

  • Scarica il programma di installazione di Office 2003 PIA da qui: Office 2003 Update: Redistributable Primary Interop Assemblies

  • Estrai l'eseguibile autoestraente sulla riga di comando (/? elencherà le opzioni):

    >O2003PIA.exe /C /T:C:\PIA 
    
  • Eseguire il MSI estratto con la registrazione completa abilitato:

    >msiexec -i O2003PIA.msi /l*vx log.txt 
    

    e controllare il registro per l'assembly di interoperabilità Access e ulteriori osservazioni se qualcosa è andato storto con l'installazione. In alternativa a questo passaggio è possibile utilizzare un'utilità di decompressione MSI per ottenere l'assembly.

+0

No, il file PIA non esiste sul server da nessuna parte, anche dopo averlo scaricato e installato manualmente. –

+0

BTW: soluzione interessante nel link, ma se avessi usato qualcosa del genere sarei stato deriso fuori dalla stanza al momento della revisione del codice. Posso vederlo ora: "WTF è tutta questa merda?" –

+0

Infatti. In attesa di VS 2010 che gestirà tutti i ComImports per voi ben ... –