【问题标题】:Tool to import Type Libraries as C# code将类型库导入为 C# 代码的工具
【发布时间】:2010-10-02 06:38:44
【问题描述】:

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

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

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

我确信过去我会遇到这样的工具 - 但也许它梦想过它:-)

【问题讨论】:

    标签: c# com-interop tlbimp


    【解决方案1】:

    今天这对您没有帮助,但是下一版本的 C# 中会有一个功能。根据您阅读的演示文稿,它被称为 NoPia 或类型嵌入。此功能本质上会将 PIA 程序集链接到您从中引用它的任何项目中。最终结果是一个不需要部署互操作/PIA DLL 的单个 EXE。

    Misha 的帖子:http://blogs.msdn.com/mshneer/archive/2008/10/28/type-embedding-support-in-c.aspx

    但短期内,您可能必须使用 ILMerge 或反射器 + 复制代码。

    【讨论】:

    • 是的,我听说过。继续使用 CLR 4.0!
    【解决方案2】:

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

    【讨论】:

      【解决方案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%
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        相关资源
        最近更新 更多