Ferramenta para importar bibliotecas de tipos como código C#
-
19-08-2019 - |
Pergunta
Existe uma ferramenta para importar/converter bibliotecas de tipo COM em código C# em vez de gerar uma montagem? A ferramenta TLBIMP e a classe TypeLibaryConverter geram apenas conjuntos.
Eu tive algum sucesso rasgando o C# ComImport
Definições executando o refletor sobre a montagem de interope gerada e copiando uma colagem da fonte desmontada, mas isso geralmente requer um pouco de remendamento manual antes de compilar.
O objetivo desejado é um único exe sem DLLs de interoperamento de satélite; portanto, talvez a resposta seja usar o Ilmerge para incorporar efetivamente a DLL de interoper no exe.
Eu tinha certeza do passado, encontrei uma ferramenta assim - mas talvez tenha sonhado :-)
Solução 3
Como eu originalmente suspeitei, a melhor solução está indo com Ilmerge. Não posso ser seletivo em relação a partes de uma API para incorporar, mas funciona bem o suficiente.
Aqui está a linha de comando de eventos de pós -construção que estou usando, que deve ser fácil de reutilizar:
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%
)
Outras dicas
Não tenho tanta certeza de Codeplex. O VS2010 definitivamente resolverá seu problema.
Isso não vai te ajudar hoje, mas há um recurso na próxima versão do C#. É chamado de nopia ou tipo de incorporação, dependendo da apresentação que você lê. Esse recurso essencialmente vinculará uma montagem da PIA a qualquer projeto de que você faça referência a ele. O final de final é um único exe que não precisa implantar uma DLL interop/PIA.
Postagem de Misha sobre o assunto: http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-n-c.aspx
A curto prazo, porém, você pode precisar ir com o código Ilmerge ou refletor + cópia.