我的c#项目中引用了一个遗留的vb.net dll。 调用各种方法没问题,但我需要能够从dll中显示一个表单,这样用户就可以从数据库响应中选择正确的行。
Assembly assembly = Assembly.LoadFile("FMSValidation.dll");
不会产生错误,但
Type type = assembly.GetType (FMSValidation.CreditorDetails );
告诉我'CreditorDetails'是一种类型,在上下文中无效。
答案 0 :(得分:3)
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()
一样使用其类型。
答案 1 :(得分:0)
FMSValidation.CreditorDetails
是一种类型,但它不是实际的Type
对象。如果你想要一个实际的类型对象,你可以在源代码中写出类型的名称(即它不在字符串变量或其他东西中),那么你可以使用typeof(FMSValidation.CreditorDetails)
代替{{ 1}}。