在C#中静态链接COM DLL(避免regfree)

时间:2011-02-24 16:11:32

标签: c# .net visual-c++ static-libraries regfreecom

我可能有一个愚蠢的问题:

我们有一个VC ++ COM DLL(内部开发),我们已经将我们的主应用程序移植到C#并使用COM Interop,无需注册即可访问COM dll。内部嵌入式清单一切正常。

然而,友好的产品开发/营销/销售希望最小化包并直接包含COM dll。不知何故,有人确信app发行版应该只包含exe(因为它不受管理我们不能只是ILMerge它)。

由于我们有COM的tlb / lib,我们可以以某种方式静态链接它,而无需将整个COM移植到C#管理的重新工作吗?

谢谢

P.S。请原谅我的措辞:公司缩小规模,我是Python人,在上周左右必须学习.NET,因为现在我正在完成我的工作以及2位前高级.net开发人员的工作

2 个答案:

答案 0 :(得分:1)

看起来Costura可以或多或少这样做。 https://github.com/Fody/Costura

它特别支持将非托管程序集(即C ++ DLL)合并到.NET程序集中。

注意 - 这不是真正的静态链接,但可以实现将所有内容打包到单个EXE中的目的。

答案 1 :(得分:0)

可以将COM DLL的源包含到exe的项目中,或者可以将COM DLL项目更改为静态lib项目。完成后,必须修改代码才能直接创建COM对象。所有人都说,这两种选择都不是特别容易。

或者你可以查看像Spoon Studio这样的产品,它们允许你将exe和COM DLL包装成一个没有任何代码的exe。