Question

Existe-t-il un outil pour importer / convertir des bibliothèques de types COM en code C # plutôt que de générer un assemblage? L'outil TLBIMP et la classe TypeLibaryConverter ne génèrent que des assemblys.

J'ai réussi à extraire les définitions C # ComImport en exécutant Reflector sur l'assemblage généré par Interop et en copiant un collage de la source désassemblée, mais cela nécessite généralement quelques corrections manuelles manuelles. je vais compiler.

L'objectif souhaité est un seul fichier EXE sans DLL d'interopérabilité satellite. La solution consiste donc peut-être à utiliser ILMerge pour intégrer efficacement la DLL d'interopérabilité dans le fichier EXE.

J'étais certain de rencontrer un tel outil dans le passé - mais peut-être rêvait-il: -)

Était-ce utile?

La solution 3

Comme je le soupçonnais au départ, la meilleure solution est d'utiliser ILMerge . Je ne peux pas intégrer certaines parties d'une API COM à intégrer, mais cela fonctionne assez bien.

Voici la ligne de commande de l’événement Post Build que j’utilise, qui devrait être assez facile à réutiliser:

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%
)

Autres conseils

Je ne suis pas sûr que cela vous soit utile, mais le code source d'une version gérée de Tlbimp.exe a été publié sur CodePlex . VS2010 résoudra définitivement votre problème.

Cela ne vous aidera pas aujourd’hui, mais une fonctionnalité apparaît dans la prochaine version de C #. Cela s'appelle NoPia ou Type Embedding en fonction de la présentation que vous avez lue. Cette fonctionnalité liera essentiellement un assemblage PIA dans le projet de référence. Le résultat final est un seul fichier EXE qui ne nécessite pas de déployer une DLL interop / PIA.

Article de Misha sur le sujet: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

Cependant, à court terme, vous devrez peut-être utiliser ILMerge ou un code réflecteur + copie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top