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

DLL Methods Inaccessible in C# but not in VB.NET

我正在将遗留 VB.NET 应用程序转换为 C# 应用程序。 VB.NET 应用程序引用了一个外部 .DLL (ExternalLib.dll),它具有实现 IMyClass.

的 class MyClass

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

Dim external As New MyClass
external.DoMethod(1)

在 C# 中,此代码引发编译时错误:

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

'ExternalLib.MyClass' does not contain a definition for 'DoMethod' and no extension method 'DoMethod' accepting a first argument of type 'ExternalLib.MyClass' could be found (are you missing a using directive or an assembly reference?)

查看元数据,IMyClass 没有 DoMethod()。在 VB.NET 的 Intellisense 中,DoMethod() 没有出现在其他可用的 public 方法中,但一切都可以正常编译和运行。

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

MyClass.DoMethod(1);

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

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

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