Инструмент для импорта библиотек типов в виде кода C #

StackOverflow https://stackoverflow.com/questions/458258

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение 3

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

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

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

Другие советы

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

Сегодня это не поможет, но в следующей версии 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 или рефлектором + скопировать код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top