C# 使用tlbimp而不需要第二次组装?
我试图在我的C#dll中实现一个COM接口,供其他人使用。我在foo.idl中定义了一个接口 我通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。现在要实现我的接口,我可以在我的dll中引用foo.dll来实现接口 这是一个很好的例子,但有一个例外:我现在必须分发两个DLL,而不是一个。这实际上违背了我正在从事的项目的要求:交付一个DLLC# 使用tlbimp而不需要第二次组装?,c#,com,com-interop,tlbimp,C#,Com,Com Interop,Tlbimp,我试图在我的C#dll中实现一个COM接口,供其他人使用。我在foo.idl中定义了一个接口 我通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。现在要实现我的接口,我可以在我的dll中引用foo.dll来实现接口 这是一个很好的例子,但有一个例外:我现在必须分发两个DLL,而不是一个。这实际上违背了我正在从事的项目的要求:交付一个DLL 有没有办法将tlbimp dll合并到我的中,或者有没有其他方法(在C#中实现一个COM接口,而不使用第二个dll)?您可能会通过使
有没有办法将tlbimp dll合并到我的中,或者有没有其他方法(在C#中实现一个COM接口,而不使用第二个dll)?您可能会通过使用.tlb而不是“glue”dll进行欺骗 我建议您使用MSVC++/CLR创建一个混合模式程序集
- 您可能会通过使用.tlb而不是“glue”dll来作弊
我建议您使用MSVC++/CLR创建一个混合模式程序集
- 一个好的反汇编程序可以完成这项工作,就像反射器一样。您可以简单地反汇编互操作程序集,并将生成的C#接口声明复制到源代码中。当然,只有在接口声明和IID稳定的情况下才应该这样做
并肯定考虑升级到VS2010。它的“嵌入互操作类型”功能允许您在不使用互操作程序集的情况下发布程序集。
一个好的反汇编程序可以完成这项工作,就像Reflector一样。您可以简单地反汇编互操作程序集,并将生成的C#接口声明复制到源代码中。当然,只有在接口声明和IID稳定的情况下才应该这样做并肯定考虑升级到VS2010。它的“嵌入互操作类型”功能允许您在不使用互操作程序集的情况下发布程序集。
您将此操作向后进行:只需使用ComExport
和相关属性将接口定义为C#接口,然后在目标计算机上使用regasm
为COM互操作注册.NET程序集。您将此操作向后进行:只需使用ComExport
和相关属性将接口定义为C#接口,然后在目标计算机上使用regasm
为COM互操作注册.NET程序集。不幸的是,混合模式程序集不是一个选项。我正在构建的库是用C#编写的,结果需要一个dll。ILMerge可能是一个选项。不幸的是,混合模式程序集不是一个选项。我正在构建的库是用C#编写的,结果需要一个dll。ILMerge可能是一个选项。Facepalm。我正在使用VS2010,我只是不知道“嵌入互操作类型”功能。我现在知道了,谢谢!脸掌。我正在使用VS2010,我只是不知道“嵌入互操作类型”功能。我现在知道了,谢谢!