DLL方法在C#中不可访问,但在VB.NET中不可



我正在将传统的VB.NET应用程序转换为C#应用程序。VB.NET应用程序引用了一个外部.DLL(ExternalLib.DLL),该DLL具有实现IMyClass的类MyClass

在VB.NET中,此代码编译和执行都没有问题:

Dim external As New MyClass
external.DoMethod(1)

在C#中,这段代码抛出一个编译时错误:

MyClass external = new MyClass();
external.DoMethod(1);

"ExternalLib.MyClass"不包含"DoMethod"的定义,并且没有接受类型为的第一个参数的扩展方法"DoMethod"未能找到"ExternalLib.MyClass"(是否缺少使用指令还是程序集引用?)

从元数据来看,IMyClass没有DoMethod()。在VB.NET的Intellisense中,DoMethod()并没有出现在其他可用的公共方法中,但所有方法的编译和运行都很好。

DoMethod()是静态方法还是实例方法?如果它是一个静态方法,可以解释为什么在接口中看不到它。您需要将您的C#代码更改为:

MyClass.DoMethod(1);

VB.NET应用程序正在使用与option strict off的后期绑定来访问ExternalLib.dll中的隐藏方法。使用dynamic关键字可以在C#应用程序中实现相同的行为:

dynamic external = new MyClass();
external.DoMethod(1);

(感谢Blorgbeard为我指明了正确的方向。)

最新更新