objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
objType,怎么取不到值,并且报错:未将对象引用到实例AssemblyPath = DAL
ClassNamespace = SIN.DAL(App.config中已配置好)为什么会找不到DAL层,路径应该不会有问题?如果是路径问题会出在哪?

解决方案 »

  1.   

    ClassNamespace给的是正确的吗?
      

  2.   

    Assembly.Load(AssemblyPath)可能没有成功,看看路径吧
      

  3.   

    怎么看路径?
    AssemblyPath是我在app.config中配置的,SIN.DAL
      

  4.   

    把AssemblyPath配置成文件的物理路径,用LoadFrom方法加载
      

  5.   

    如果在同一个文件夹里,可以只写dll文件名
      

  6.   

    DAL和DALFactory是在同一目录下
    我在属性中也加了相同的命名空间
      

  7.   

    所以,app.config中我就直接这样写的
    <add key="DAL" value="SIN.DAL"/>
      

  8.   

    那你设个断点,看看运行时AssemblyPath到底是什么内容
      

  9.   

    AssemblyPath:     SIN.DAL
    ClassNamespace:   SIN.DAL.DALClassName
      

  10.   

    DALClassName 不就是DAL中的类名吗
    前面的都一样,怎么就是找不到?
    objType 就是 null
      

  11.   

    AssemblyPath:    SIN.DAL 
    你没改成SIN.DAL.dll?
      

  12.   

    看下 你的程序集名称 ..... 然后看下类名 DALClassName 为完整路径 
      

  13.   

    DALClassName 的大小写对不?
      

  14.   

    ssembly.Load("程序集").CreateInstance("命名空间.类")
    string assemblyName = ConfigurationManager.AppSettings["nameSpaceName"];
    string fullTypeName = string.Concat(ConfigurationManager.AppSettings["nameSpaceName"], ".", ConfigurationManager.AppSettings["typename"]);
    AbstractFactory factory = (AbstractFactory)Assembly.Load(assemblyName).CreateInstance(fullTypeName);<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="nameSpaceName" value="ConsoleApplication1"/>
        <add key="typename" value="CFactory"/>
      </appSettings>
    </configuration>
      

  15.   

    Assembly a=Assembly.Load(AssemblyPath)objType = a.CreateInstance(ClassNamespace);
    分成两段,看看是a没有还是obj没有
      

  16.   

    Assembly a=Assembly.Load(AssemblyPath)
    a没有值这是什么原因?问题出在哪?
      

  17.   

    那肯定是路径不对了。
    Assembly a=Assembly.Load(AssemblyPath) 在这里设个断点,看看AssemblyPath的内容
      

  18.   

    AssemblyPath = SIN.DAL
      

  19.   

    private static readonly string AssemblyPath = ConfigurationManager.AppSettings["OraDAL"];App.config中   <add key="OraDAL" value="SIN.DAL">
      

  20.   

    那你就确认一下SIN.DAL.dll是不是在你的程序所在的文件夹下
      

  21.   

    如果你的命名空间和类名没有问题,那么出现这个情况,通常是由于你的应用程序里没有引用这个dll文件或程序集。记住是应用程序集,不是那个反射类。