我已经复制了用于在解决方案中创建类似程序集的程序集的代码。GUTS 不同,但外壳保持不变。
这些程序集在客户端的项目中使用,它们是附加组件,而不是我们核心代码的一部分。现在我已经完成了程序集并不想像它应该的那样加载。
加载程序集的代码是
var assemblyName = ((XmlElement)xmlDoc.GetElementsByTagName("AssemblyName")[0]).InnerText;
var qualifiedClass = ((XmlElement)xmlDoc.GetElementsByTagName("QualifiedClass")[0]).InnerText;
IExternalAddOn addOn = (IExternalAddOn)Activator.CreateInstance(assemblyName, qualifiedClass).Unwrap();
var properties = new Dictionary<Type, object>();
properties[typeof(DevExpress.XtraBars.Ribbon.RibbonControl)] = mainForm.ribbon;
var form = addOn.ShowForm(properties);
if (form != null)
{
form.MdiParent = mainForm;
form.Text = pListRow.NAME;
form.Show();
我在 CreateInstance 部分遇到异常。
有趣的是,当我使用
Assembly ass = Assembly.LoadFrom(assemblyName); // this is test code
Type at = ass.GetType(qualifiedClass);
IExternalAddOn addOn = (IExternalAddOn)Activator.CreateInstance(at);
加载程序集并获取类型,然后 CreateInstance 它工作。
为什么需要 Unwrap?两种不同的加载方式有区别吗?为什么第一个不起作用?
谢谢
Ĵ