我动态加载了一个dll~~
代码如下var dllUri = new Uri( Environment.CurrentDirectory + @"\dll\WpfControlLibrary1.dll" );
var uri =  dllUri.ToString( );
Assembly assembly=Assembly.LoadFrom( uri );
string NameSpaceStr=assembly.GetTypes( )[1].ToString( );//获取DLL命名空间
try
{
Object obj=assembly.CreateInstance( NameSpaceStr , true );//创建对象
frm=obj as UserControl;
grid.Children.Add(frm);
.......
}
catch(...)
{...}但是个别dll在assembly.CreateInstance这一步时发生错误~~~错误提示 "无法将类型为WpfControl.UserControl1的对象强制转换为类型System.Windows.window"这个是什么错误啊~??应该样解决呢~~

解决方案 »

  1.   

    显然你需要一个System.Windows.window这样的对象,但你实际创建的对象不能转换为这个类型
    也就是说,你实际.CreateInstance返回的对象不是这个类型或它的子类,  你动态创建的那个类应该继承自System.Windows.window这个类,就没有这个问题了
      

  2.   


    CreateInstance方法的参数时string类型的,传进去的是控件名称,应该是在他的内部转换的~~返回值是Object类型的~~
      

  3.   

    assembly.CreateInstance的基础应该是一个form,但是你的assembly 在Assembly assembly=Assembly.LoadFrom( uri );是获取的是一个WpfControl.UserControl1类型
      

  4.   

    lz的代码应该不会产生这样的问题,而且根据lz所说的个别dll才会出现这问题,有可能是dll内部的bug。
    试下直接引用dll再创建对象会不会有这问题?
      

  5.   


    嗯,嗯,是啊~~assembly.CreateInstance的基础应该是一个System.Windows.window类型的,这个应该怎么解决啊~~