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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top