Попытка получить ссылочный 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
,