Инструмент для импорта библиотек типов в виде кода C # - PullRequest
2 голосов
/ 19 января 2009

Существует ли инструмент для импорта / преобразования библиотек типов COM в код C # вместо генерации сборки? Инструмент TLBIMP и класс TypeLibaryConverter генерируют только сборки.

Я добился некоторого успеха, разрывая определения C # ComImport, запустив Reflector над сгенерированной сборкой Interop и скопировав вставленный дизассемблированный источник, но обычно для этого требуется некоторое ручное исправление перед компиляцией.

Желаемой целью является один EXE без сателлитных Interop DLL, поэтому, возможно, ответ заключается в использовании ILMerge для эффективного встраивания Interop DLL в EXE.

Я был уверен, что в прошлом я сталкивался с таким инструментом - но, возможно, ему это снилось: -)

Ответы [ 3 ]

4 голосов
/ 19 января 2009

Я не уверен, что это будет полезно для вас, но исходный код для управляемой версии Tlbimp.exe был выпущен на CodePlex . VS2010 определенно решит вашу проблему.

2 голосов
/ 03 февраля 2009

Как я изначально подозревал, лучшее решение идет с ILMerge . Я не могу быть избирательным в отношении частей COM API для встраивания, но он работает достаточно хорошо.

Вот командная строка события Post Build, которую я использую, и ее достаточно легко использовать:

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%
)
2 голосов
/ 19 января 2009

Это не поможет вам сегодня, но есть функция, которая появится в следующей версии C #. Это называется NoPia или Type Embedding, в зависимости от того, какую презентацию вы прочитали. Эта функция по существу свяжет сборку PIA с любым проектом, на который вы ссылаетесь. Конечным результатом является один EXE, который не требует развертывания Interop / PIA DLL.

пост Миши по теме: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

Хотя в краткосрочной перспективе вам, возможно, придется пойти с ILMerge или рефлектором + скопировать код.

...