Domanda

Esiste uno strumento per importare / convertire le librerie di tipi COM in codice C # anziché generare un assembly? Lo strumento TLBIMP e la classe TypeLibaryConverter generano solo assiemi.

Ho avuto qualche successo nel rippare le definizioni C # ComImport eseguendo Reflector sull'assieme Interop generato e copiando incollando la sorgente disassemblata, ma questo di solito richiede un bel po 'di patching manuale prima di esso compilerò.

L'obiettivo desiderato è un singolo EXE senza DLL di interoperabilità satellitare, quindi forse la risposta è utilizzare ILMerge per incorporare efficacemente la DLL di interoperabilità in EXE.

Ero sicuro che in passato mi sarei imbattuto in un simile strumento - ma forse l'ho sognato :-)

È stato utile?

Soluzione 3

Come inizialmente sospettavo, la soluzione migliore sta andando con ILMerge . Non posso essere selettivo su parti di un'API COM da incorporare, ma funziona abbastanza bene.

Ecco la riga di comando di Post Build Event che sto usando, che dovrebbe essere abbastanza facile da riutilizzare:

set MERGEFILES=Interop.Foo.dll Interop.Bar.dll

if "$(ConfigurationName)" == "Release" (
   ren "$(TargetFileName)" "_$(TargetFileName)"
   "$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe" /out:"$(TargetFileName)" "_$(TargetFileName)" %MERGEFILES%

   del "_$(TargetFileName)"
   del %MERGEFILES%
)

Altri suggerimenti

Non sono così sicuro che ti sarà utile, ma il codice sorgente per una versione gestita di Tlbimp.exe è stato rilasciato su CodePlex . VS2010 risolverà sicuramente il tuo problema.

Questo non ti aiuterà oggi, ma c'è una funzionalità in arrivo nella prossima versione di C #. Si chiama NoPia o Type Embedding a seconda della presentazione che leggi. Questa funzione collegherà essenzialmente un assieme PIA a qualunque progetto tu faccia riferimento. Il risultato finale è un singolo EXE che non è necessario distribuire una DLL interop / PIA.

Post di Misha sull'argomento: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

A breve termine, tuttavia, potrebbe essere necessario utilizzare ILMerge o reflector + codice copia.

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