我安装你的方法建立了三个工程,试验通过没有问题,当然,你上面贴的code中是有些小错误的(比如大小写,名称). 程序逻辑没有问题,你看看是不是其他地方的问题.最后,说一个近乎笑话的问题,这个n2.dll在当前目录下吧.我的code:1. Project N1:
using System;
using System.Reflection;namespace N1
{
public abstract class FooBase
{
public static FooBase CreateInstance(string fileName, string typeName)
{
Assembly fooAssembly = Assembly.LoadFrom(fileName);
object obj = fooAssembly.CreateInstance(typeName); return (FooBase)obj; // 抛出了数据转换错误的异常
}
     
// other methods
}
}2.Project N2:namespace N2
{
public class Foo : N1.FooBase
{
// other methods
}
}3. Project Exe 
N1.FooBase foo = N1.FooBase.CreateInstance("n2.dll", "N2.Foo");
MessageBox.Show(foo.ToString());我的计算机上的结果:
N2.Foo

解决方案 »

  1.   

    多谢 bugfree(八个飞飞之五角大楼) 
    我将所有的项目按顺序重新编译一次,结果正确了,但只要在没有任何修改的情况下再次编译n1项目,不编译n2项目,又出现了错误,我想可能是CLR版本控制的问题。
    有什么方法可以解决这个问题吗?
    还有用regasm将assembly注册,只要rebuild一次,所有guid都会变,有什么方法可以手动控制项目的guid
      

  2.   

    >> 有什么方法可以解决这个问题吗?
    应该是版本问题没错,可以试试看在AssemblyInfo.cs里面把所有的版本号都写死,不要留*,例如1.0.0.1。
    不过,我觉得在这种情况下用Interface会比较好——既然是动态创建,N1索性没有N2的引用不是更好?>> 还有用regasm将assembly注册,只要rebuild一次,所有guid都会变,有什么方法可以手动控制项目的guid
    给你的类加上GuidAttribute,试试看。