Попытка получить ссылочный vb.net dll для showdialog в C#

У меня есть устаревшая dll vb.net, на которую ссылаются в моем проекте на C#. Вызов различных методов не проблема, но мне нужно иметь возможность отображать форму из DLL, чтобы пользователи могли выбрать правильную строку из ответа базы данных.

Assembly assembly = Assembly.LoadFile("FMSValidation.dll");

не выдает ошибок, но

Type   type  = assembly.GetType (FMSValidation.CreditorDetails );

говорит мне, что 'CreditorDetails' является типом, который недопустим в контексте.

2 ответа

assembly.GetType не принимает фактический тип. Он принимает строку:

Type type = assembly.GetType("FMSValidation.CreditorDetails");

Это не имеет смысла для assembly.GetType чтобы иметь возможность взять тип, так как на тот момент у вас уже есть тип.

Если у вас есть тип, вы можете создать его экземпляр с помощью класса активатора:

var form = (System.Windows.Forms.Form)Activator.CreateInstance(type);
form.ShowDialog();

Если CreditorDetails требует каких-либо аргументов конструктора, используйте перегрузку CreateInstance который принимает массив аргументов.


Похоже компилятор знает FMSValidation.CreditorDetails это тип - поэтому мне интересно, почему вы динамически загружаете сборку и пытаетесь вообще использовать GetType. Вы должны просто иметь возможность добавить ссылку на сборку и использовать ее типы, как и любые другие, например new FMSValidation.CreditorDetails(),

FMSValidation.CreditorDetails это тип, но это не факт Type объект. Если вам нужен реальный объект типа, и вы можете написать имя типа в исходном коде (т. Е. Это не строковая переменная или что-то еще), вы должны использовать typeof(FMSValidation.CreditorDetails) вместо assembly.GetType,

Другие вопросы по тегам