DLL方法在C#中不可访问,但在VB.NET中不可访问
我正在将遗留的VB.NET应用程序转换为C#应用程序。VB.NET应用程序引用了一个外部.DLL(ExternalLib.DLL),它具有类DLL方法在C#中不可访问,但在VB.NET中不可访问,c#,vb.net,dll,C#,Vb.net,Dll,我正在将遗留的VB.NET应用程序转换为C#应用程序。VB.NET应用程序引用了一个外部.DLL(ExternalLib.DLL),它具有类MyClass,该类实现了IMyClass 在VB.NET中,此代码编译和执行时不会出现问题: Dim external As New MyClass external.DoMethod(1) 在C#中,此代码引发编译时错误: MyClass external = new MyClass(); external.DoMethod(1); “Externa
MyClass
,该类实现了IMyClass
在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应用程序正在使用带有选项strict off
的后期绑定来访问ExternalLib.dll中的隐藏方法。使用dynamic
关键字可以在C#应用程序中实现相同的行为:
dynamic external = new MyClass();
external.DoMethod(1);
(Blorgbeard为我指出了正确的方向,这真是太好了。)VB.NET代码是否设置为选项严格打开
或关闭
?可能已经晚了。IMyClass
到底是从哪里来的?您似乎没有使用它..将C#@更改为IMyClass external=…
,它可能也会工作。IMyClass在我使用“转到定义”时显示,并且有几个方法不包括DoMethod()。我认为这些信息可能会有帮助。VB.NET应用程序中的编译设置为:选项显式:打开、选项严格:关闭、选项比较:二进制、选项推断:Off@AlexeiLevenkov它不起作用(同样的错误。@Blorgbeard-我想你给了我一个主意。我将测试将MyClass external
更改为dynamic external
是否有效。良好的调用-VB允许你通过实例调用静态方法,这将解释op的情况(但C通常会发出更有用的错误消息…)。不幸的是,它不是静态方法。MyClass.DoMethod(1)
导致“ExternalLib.MyClass”不包含“DoMethod”的定义。