本帖最后由 postcha 于 2014-06-18 18:18:19 编辑

解决方案 »

  1.   

    重新写了一遍,结果报的找不到程序集。
    代码如下,用VS2013打开。
    http://www.postcha.com/testabc.zip
      

  2.   

    是不是应该这样呢?           //加载程序集
               Assembly asm = System.Reflection.Assembly.Load(configName);
               //得到一个类型
               Type type = asm.GetType(className);
      

  3.   

    还是一样。
    如果我用简单工厂,直接返回一个new App_dal();的话,正常,说明其它地方没有错。就是工厂里的private static Type GetIn(string name)有问题。但是问题又找不出。我的环境是windows 8.1 x64 + .NET 4.5/4.5.1+VS2013 UPDATE 1/UPDATE 2都试了,结果都一样。没有其它环境了,没法试。
      

  4.   

    Type[] types = Type.GetTypes();
    foreach (var item in types)
    {
        输出(item.Name);
    }
    用这个代码输出全部的Type,看看有没有“className”。
      

  5.   

    还是一样。
    如果我用简单工厂,直接返回一个new App_dal();的话,正常,说明其它地方没有错。就是工厂里的private static Type GetIn(string name)有问题。但是问题又找不出。
    你可以把 asm.GetTypes() 全都打印出来,看看你的className中的值有什么问题。通常是忘记了在类型前边写上命名空间。
      

  6.   

    如果是我,我会把所有引用都添加一遍,或者是把该有的需要调用的程序集都拷贝到bin目录下
      

  7.   

    请尝试以下代码        public static IDAL.IUser GetUserDAL()
            {
                //配置文件中的程序集名称和命名空间
                string configName = ConfigurationManager.AppSettings["DataAccess"];
                //得到全类名
                string className = configName + ".UserDal";
                //加载程序集
                System.Reflection.Assembly.LoadFile(
                    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", configName + ".dll"));            string n = typeof(UserDal).AssemblyQualifiedName;            Type type = Type.GetType(className + ", " + configName);
                IDAL.IUser dal = Activator.CreateInstance(type) as IDAL.IUser;
                return dal;
            }另外要把MY.DAL.dll放到.\web\bin里面。LoadFile需要指定绝对路径。建议把configName改名为assemblyName。以上代码在我的电脑运行通过。