Creare gli assembly di interoperabilità primari o generarli?

6

Non ho mai visto questa domanda in modo definitivo:

Se si sta mantenendo una DLL COM che può essere utilizzata da un programma .NET, è meglio:

  1. Importare la DLL COM in ogni progetto, che genera un assembly Interop per ogni progetto? o

  2. Generare l'assieme di interoperabilità primario con TLBIMP ogni volta che la DLL COM viene compilata? o

  3. Scrivi l'assembly di interoperabilità primario in C # e compila ogni volta che la DLL COM viene compilata?

Mi piacerebbe fare il numero 2 o il numero 3. Il suono del numero 2 sembra convincente, ma non riesco a vedere come si imposta AssemblyTitleAttribute (e altri attributi simili); Suppongo che tu usi gli attributi personalizzati nell'IDL che TLBIMP avrebbe rilevato.

    
posta Null Pointers etc. 02.02.2012 - 20:37
fonte

2 risposte

1

Odio davvero darti una risposta "dipende" ... ma dipende!

In genere fare affidamento sul file Interop generato va bene se l'impostazione del progetto è piuttosto banale. Quando hai molti progetti e / o quando usi nomi forti, le cose possono diventare un po 'più complicate. Nel nostro caso, abbiamo fondamentalmente un nome strong per tutto, e questo include i file Interop. Compiliamo i nostri progetti tramite uno script sul nostro server di integrazione e generiamo tutti i nostri file Interop al volo quando ne abbiamo bisogno, ma prima di compilare la fonte del nostro progetto. In questo modo, non dobbiamo pensare a tutti quei casi limite in cui l'accesso agli assembly potrebbe non funzionare. In questo caso sembra che stiamo implementando la tua seconda opzione, e di solito non si preoccupano della prima opzione a meno che non sia qualcosa di molto banale e non abbiamo bisogno di fare affidamento su un nome strong o su una build precedente - per qualsiasi ragione.

Per quanto riguarda la terza opzione, non riesco ad immaginare come mai avrai bisogno di creare i tuoi file Interop, dato che hai a disposizione altre 2 opzioni che ti rendono il compito molto più facile per te.

    
risposta data 03.02.2012 - 04:12
fonte
0

In uno dei miei progetti, abbiamo implementato l'opzione 2. La generazione implicava la creazione dell'assembly, lo disassemblavo usando ildasm , riassemblandolo di nuovo usando ilasm e infine firmandolo. Il motivo del roundtrip era che volevamo incorporare le informazioni sulla versione nel PIA.

AFAIK, l'opzione 1 non consentirà lo scambio di oggetti COM tra diverse applicazioni.

L'opzione 3 ti dà sicuramente la piena potenza di progettare l'interoperabilità "nel modo in cui dovrebbe essere", non il modo in cui è sputata da tlbimp . Scrivere semplici spedizionieri non è difficile, ma tlbimp fa già abbastanza bene questo lavoro. Se lo vuoi davvero "come dovrebbe essere", l'interoperabilità potrebbe benissimo diventare un progetto complesso a sé stante.

    
risposta data 03.02.2012 - 01:10
fonte

Leggi altre domande sui tag