当我尝试使用ComSourceInterfaces的字符串参数而不是typeof时,我无法将程序集注册为COM对象。我正在实现多个接口,因为这是SDK所要求的。
当我使用
时[ComVisible(true),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces("IAccessControl"),
Guid("738CFFEF-37DC-4C61-957E-C5A78FE20223")]
public class EventGeneratorV2 : IAccessControl
我收到错误
错误MSB3217:无法注册程序集“... \ Event Generator v2.dll”。无法从程序集“事件”加载“IAccessControl”类型 Generator v2,Version = 1.1.0.0,Culture = neutral, 公钥= bffdb712704a75b7' 。
但是,如果我将代码更改为
[ComVisible(true),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IAccessControl)),
Guid("738CFFEF-37DC-4C61-957E-C5A78FE20223")]
public class EventGeneratorV2 : IAccessControl
它确实可以正常工作。我还尝试了IAccessControl接口的完全限定名称,Lib.Interfaces.IAcccessControl作为字符串,但它仍然失败。最好的解决方案是使用多个ComSourceInterfaces但你只能使用一次,使用typeof最多需要4个接口。我需要实现9个接口,以便与其他软件兼容。有没有办法让字符串起作用?
答案 0 :(得分:0)
好吧我明白了。该字符串实际上是" Lib.Interfaces.IAcccessControl,Lib"对于每个接口。第一部分是接口的完全限定名称,而lib是接口来自的参考。
然后当我添加其他接口时,我必须在每个接口之间添加\ 0。所以我最后的ComSourceInterfaces是相当冗长的
ComSourceInterfaces("Lib.Interfaces.IAccessControl, Lib\0Lib.Interfaces.IAccessControl2, Lib\0Lib.Interfaces.ITranslate, Lib\0Lib.Interfaces.ITranslate2, Lib\0Lib.Interfaces.IComConfig, Lib\0Lib.Interfaces.IComConfig2, Lib\0Lib.Interfaces.IInput, Lib\0Lib.Interfaces.IInput2, Lib\0Lib.Interfaces.IAsset, Lib\0Lib.Interfaces.IAsset2, Lib\0Lib.Interfaces.IFakeName, Lib\0Lib.Interfaces.IComManager, Lib\0Lib.Interfaces.IDistributeEvent, Lib")
之后,DLL会正确编译和注册。