Assembly.Load(path).CreateInstance 反射出错解决办法

最近采用工厂模式反射DAL层出现一些问题,所以自己想写一下自己认为标准解决的思路和解决方法以备后用。

1.这是项目结构

2.这是DALFactory 反射代码

 #region 创建对象(不使用缓存)
        /// <summary>
        /// 创建对象(不使用缓存)
        /// </summary>
        /// <param name="AssemblyPath"></param>
        /// <param name="ClassNamespace"></param>
        /// <returns></returns>
        private object CreateObjectNoCache(string AssemblyPath, string ClassNamespace)
        {
            try
            {
                Assembly assm = Assembly.Load(AssemblyPath);//第一步:通过程序集名称加载程序集
                object objType =assm.CreateInstance(ClassNamespace);// 第二步:通过命名空间+类名创建类的实例。
                return objType;
            }
            catch (Exception ex)
            {
                //LogOperate.WriteErrorLog("创建反射异常(不使用缓存)", ex);
                return null;
            }
        }
        #endregion

上面我把发射分成两步以方便进行调试:

第一步:通过程序集名称加载程序集(注意是程序集名,不是命名空间)

Assembly assm = Assembly.Load(AssemblyPath);

如果调试之后是在这一步报错:System.IO.FileNotFoundException: 未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。

那么原因有两个:

一,是你的程序集名称写错了,你的程序集名称可以通过项目—属性—应用程序 查看。

二,是在web网站或者Windows应用程序必须要引用你要反射的项目。

比如我这里的Windows应用程序是SxPM 必须要引用SQLServerDAL。如图:

第二步:通过命名空间.类名创建类的实例。

如果调试之后是这一步报错,比如你在调用实例化后的类会报未将对象引用实例 那么原因是你的类名写错了或者是命名空间写错了。

时间: 2024-10-13 08:53:04

Assembly.Load(path).CreateInstance 反射出错解决办法的相关文章

工厂模式的Assembly.Load(path).CreateInstance(className)出错解决方法

1.问题描述 ★代码展示 下面是Factory中的一段代码: '********************************************** ' 文 件 名:DataAcess ' 命名空间:Factory ' 内 容: ' 功 能:创建用户需要的接口 ' 文件关系: ' 作 者:令仔很忙 ' 小 组: ' 生成日期:2014-07-28 17:37:52 ' 版 本 号:V2.0 ' 修改日志: ' 版权说明: '********************************

关于反射Assembly.Load(&quot;程序集&quot;).CreateInstance(&quot;命名空间.类&quot;)

关于反射Assembly.Load("程序集").CreateInstance("命名空间.类") 而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有 Assembly.Load("程序集名") Assembly.LoadFrom("程序集实际路径") 说到加载程序集,有两种方法Assembly.LoadFrom

在项目中导入import javax.servlet 出错解决办法

我们有时会把别人的项目copy到自己这里进行二次开发或者参考学习,有的时候会发生下图的错误,即eclipse项目里我们导入的项目里提示HttpServletRequest 不能引用,会伴随头疼的小红叉出现 具体原因是我们工程里面web-inf/lib目录下少了相应的包:Package javax.servlet.http引起的:通俗且确切的讲就是缺少TOMCAT_HOME\lib下的servlet-api.jar.在别人的机器上他配置了Server,一般都是tomcat,而在拷贝的过程中Serv

Office 2007在安装过程中出错-解决办法

1, 可能是因为c:\program files\common files\microsoft Shared\web server Extensions\40\bin目录下缺少Fp4autl.dll,Fpencode.dll和Fp4awel.dll这三个文件导致的.可以从 windows xp的安装光盘中找到Fp40ext.cab ,把他解压出来,就可以找到这三个文件,将它们复制到bin文件夹下试试试了一下对我没用,继续搜2,运行regedit,打开注册表 找到HKEY_LOCAL_MACHIN

dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况

dpkg:处理 xxx (--configure)时出错解决办法 今早安装nfs时出现问题,找到该文,备份留用. 然后在网上找到了这片文章,按步骤走就解决了,中间会提示自动卸载一下,执行那个命令就好了, 我遇到的情况是在ubuntu上使用apt-get安装软件的时候出现如下错误: 正在设置 nfs-common (1:1.2.2-4ubuntu5) ...dpkg:处理 nfs-common (--configure)时出错: 子进程 已安装 post-installation 脚本 返回了错误

转:CentOS系统yum源配置修改、yum安装软件包源码包出错解决办法!

yum安装包时报错: Could not retrieve mirrorlist http://mirrorlist.repoforge.org/el6/mirrors-rpmforge error was 14: PYCURL ERROR 7 - "couldn't connect to host" http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/repodata/repomd.xml: [Errno 14] PYCURL ERROR 7

mkisofs出错解决办法

使用mkisofs遇到错误: genisoimage: Uh oh, I cant find the boot catalog directory 'beini/boot/isolinux'! 使用的命令是 sudo mkisofs -o boot.iso  -r -J  --no-emul-boot --boot-info-table  --boot-load-size 4 -c beini/boot/isolinux/boot.cat -b beini/boot/bzImage  -v be

黄聪:C#使用Application.Restart重启程序出错解决办法

调用 Application.Restart重启程序出错 解决办法,就是给程序的.exe文件,加上下面的设置 原文地址:https://www.cnblogs.com/huangcong/p/9267725.html

MAC上使用maven打android的包,报错:No Android SDK path could be found. 解决办法

修正: ANDROID_HOME=/Applications/Android/adt-bundle-mac-x86_64-20140321/sdklaunchctl setenv ANDROID_HOME $ANDROID_HOME http://blog.csdn.net/wirelessqa/article/details/17911811 对android工程运行mvn compile出现如下信息: No Android SDK path could be found. You may c