将类型库导入为C#代码的工具

时间:2009-01-19 16:43:33

标签: c# com-interop tlbimp

是否有工具将COM类型库导入/转换为C#代码而不是生成程序集? TLBIMP工具和TypeLibaryConverter类仅生成程序集。

通过在生成的Interop程序集上运行Reflector并复制粘贴反汇编源代码,我已经成功地删除了C#ComImport定义,但这通常需要在编译之前进行相当多的手动修补。

期望的目标是没有卫星互操作DLL的单个EXE,所以答案可能是使用ILMerge有效地将互操作DLL嵌入EXE中。

我确信过去我会遇到这样一个工具 - 但也许它梦见了: - )

3 个答案:

答案 0 :(得分:4)

我不太确定它会对您有用,但Tlbimp.exe的托管版本的源代码已在CodePlex上发布。 VS2010肯定会解决您的问题。

答案 1 :(得分:2)

今天这对你没有帮助,但下一版C#还有一项功能。它被称为NoPia或类型嵌入,具体取决于您阅读的演示文稿。此功能实质上将PIA程序集链接到您引用它的任何项目。最终结果是单个EXE,不需要部署interop / PIA DLL。

Misha关于这个主题的帖子:http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

短期而言,您可能需要使用ILMerge或反射器+复制代码。

答案 2 :(得分:2)

正如我最初怀疑最佳解决方案是ILMerge。我无法选择嵌入COM API的一部分,但它运作良好。

这是我正在使用的Post Build Event命令行,它应该很容易重用:

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