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

我在破解 C# 方面取得了一些成功 ComImport 通过在生成的 Interop 程序集上运行 Reflector 并复制粘贴反汇编的源代码来定义定义,但这通常需要在编译之前进行大量手动修补。

期望的目标是没有卫星互操作 DLL 的单个 EXE,因此答案也许是使用 ILMerge 将互操作 DLL 有效地嵌入到 EXE 中。

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

有帮助吗?

解决方案 3

正如我最初怀疑最好的解决方案是 伊尔梅格. 。我无法选择要嵌入的 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 或类型嵌入,具体取决于您阅读的演示文稿。此功能本质上会将 PIA 程序集链接到您从中引用它的任何项目。最终结果是一个单独的 EXE,无需部署互操作/PIA DLL。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top