Я в процессе преобразования устаревшего приложения VB.NET в приложение C#. Приложение VB.NET ссылается на внешний .DLL (ExternalLib.dll), который имеет класс MyClass
, который реализует IMyClass
.DLL-методы недоступны в C#, но не в VB.NET
В 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()
. В Intellisense VB.NET DoMethod()
не отображается среди других доступных общедоступных методов, но все компилируется и выполняется просто отлично.
ли код VB.NET установлен в 'вариант строгого on' или 'off'? Это может быть поздняя привязка. Где именно «IMyClass» входит в него? Кажется, вы не используете его. – Blorgbeard
Измените C# @ на 'IMyClass external = ...', и он, скорее всего, тоже будет работать. –
IMyClass появляется, когда я использую «Перейти к определению» и имеет несколько методов, которые не включают DoMethod(). Я думал, что информация может быть полезна. Параметры компиляции в приложении VB.NET: Опция явная: Вкл., Опция строгая: Выкл., Опция сравнения: Двоичный, Опция: – Kcoder