Domanda

La sua forse im manca solo qualcosa qui, ma, quando scrivo un codice per Excel interoperabilità, ecco come va.

  • I aggiungere un riferimento alle librerie Excel Com.
  • VS crea un PIA -. Microsoft.Office.Interop.Excel .... (? Via tlbimp destra)
  • copio l'exe e l'interoperabilità (PIA) DLL per qualsiasi macchina (con .net) e funziona?

C'è uno scenario in cui avrei dovuto schierare / registrare il PIA? O avere Ho qualcosa di sbagliato qui, perché mi sembra incorporare il PIA nel gruppo principale non sembra una grande caratteristica grande?

Chiedo scusa per la mia ignoranza, se del caso.


Aggiornamento:
Così ho fatto alcuni test, ho scritto un app che si apre Excel aggiunge "ciao" in una cella e salva il file.

ho costruito sulla mia macchina Win7 Dev con Office 2003 installato (Così ho fatto riferimento 2003 librerie). È interessante notare che, senza embedded PIA l'applicazione è 9KB (1.32MB fino a totale Il 3 del PIA). Con embedded PIA l'exe è 13KB .

In secondo luogo, incorporato PIA, l'applicazione ha lavorato su una macchina con Office 2007 e il 2010. e senza incorporato PIA, su WinXP + Office2007 non è riuscito solo quando il PIA di non erano nella directory del exe.

Quindi credo che qualunque metodo, c'è un qualche tipo di risoluzione dinamica? E allora perché ha funzionato su un Win7 senza il PIA di nella directory exe, ma su WinXP non è riuscito (solo quando il PIA non era in regola dir del exe), ha fatto la casella Win7 hanno del PIA prolly implementato a livello globale o qualcosa del genere?

Grazie
Gideon

È stato utile?

Soluzione

Non è così comune in realtà bisogno di un PIA. Bisogna avere uno se si espone tutti i tipi di interoperabilità dalla libreria di tipi di Excel in una delle classi pubbliche. Questo va male quando gli altri codice utilizza la classe e non utilizza la stessa libreria di interoperabilità. Un tipo NET è identico solo quando venivano dallo stesso complesso. Si otterrebbe un difficile da interpretare il messaggio di errore del tipo "non può lanciare un'applicazione all'altra". Il PIA assicura che ognuno utilizza lo stesso tipo. Fintanto che ognuno utilizza la stessa versione PIA, che di per sé è un problema difficile. Distribuzione la propria DLL di interoperabilità con il vostro app è bene se si può evitare questo. Che non è difficile in maggior parte degli scenari.

Il problema è stato risolto in .NET 4.0 attraverso una funzione chiamata 'tipo di equivalenza'. E 'specifico per tipi di interfaccia COM, il CLR considera compatibili quando hanno lo stesso [Guid] e la stessa dichiarazione, indipendentemente da ciò che li contiene assemblaggio. Questo è stato poi sfruttato con la 'incorporare interoperabilità tipi' caratteristica (lo stesso di 'no pia'), il compilatore incorpora il tipo di interoperabilità nei metadati della vostra assemblea. Solo quelli che effettivamente utilizzare.

Quindi, non c'è bisogno di spedire più la libreria di interoperabilità e non hanno bisogno del PIA. Ed è molto più piccolo di quanto si paga solo per i tipi effettivamente utilizzate. Questo è un molto di scoppio per il dollaro, fortemente raccomandato.

Altri suggerimenti

Non ho fatto molto di interoperabilità me, ma credo che:

  • A volte il PIA può essere molto grande; se l'applicazione è piuttosto piccola, il PIA può nano che
  • L'approccio non-PIA è più flessibile rispetto alle versioni: fino a quando si usa solo i membri previsto dalla versione dell'oggetto COM che è effettivamente in dotazione, che stai bene .. . mentre io penso che con l'approccio PIA, è necessario utilizzare il PIA per la stessa versione dell'oggetto COM come quella sul computer di destinazione

Una delle cose fondamentali da capire circa NoPIA è che non embedd PIA nella vostra assemblea, ma invece incorpora solo la parte del PIA che utilizza il vostro applicazione. Ciò avviene in maniera molto grana fine (fino al livello metodo). Il risultato è di solito una riduzione molto significativa delle dimensioni distribuzione della propria applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top