日期:2014-05-19  浏览次数:20815 次

反射调用DLL 返回类的问题
有两个项目   项目A   为   DLL

项目A
using   System;

namespace   CheShidll
{
///   <summary>
///   Class1   的摘要说明。
///   </summary>
public   class   Class1
{
public   List   ReceiveMoMessage(string   str)
{
List   li=new   List();
li.Content= "aaa "+str;
return   li;
}
}
public   class   List
{
public   string   Content;
}
}
然后我在项目B中调用项目A
Assembly   dss   =   Assembly.LoadFile(@ "D:\net1.0\CheShidll\bin\Debug\ "+filename);//读取程序集

foreach   (Type   type   in   dss.GetTypes())
{
          MethodInfo   m   =   type.GetMethod( "ReceiveMoMessage ");     //实例方法
          if   (m   !=   null)
          {
object   o   =   Activator.CreateInstance(type);
List   li=new   List();
                  li=(List)m.Invoke(o,   new   object[]   { "1234 "});
            }
}
(项目B也有List类   而且是一样的)
问题:在   li=(List)m.Invoke(o,   new   object[]   { "1234 "});这句
提示:指定的转换无效。

请问我应该怎么解决这个问题?
(当我在DLL里返回string类型,用string   s=(List)m.Invoke(o,   new   object[]   { "1234 "});调用时就没问题)


------解决方案--------------------
public class List
这个即使在两个项目里都有,即使名字一样,那也是两个类,不能互相转换的。
你可以把这个类放到另外的一个项目C中,A和B都引用这个C