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 为我指明了正确的方向。)
我正在将遗留 VB.NET 应用程序转换为 C# 应用程序。 VB.NET 应用程序引用了一个外部 .DLL (ExternalLib.dll),它具有实现 IMyClass
.
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 为我指明了正确的方向。)