动态加载动态库内容的时候,出现了下面的错误。
开发机上没有问题,其它两台测试机上有问题。
下面是输出的错误信息:
异常类型:TargetInvocationException
异常消息:调用的目标发生了异常。
异常信息: 在 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
在 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
在 System.Activator.CreateInstance(Type type, Boolean nonPublic)
在 System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
在 System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
在 System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
在 System.Reflection.Assembly.CreateInstance(String typeName)
在 CFW.WinForm.FrmMain.CreateForm(String className, String assemblyName
在 CFW.WinForm.FrmMain.AddTabItem(S_Menu menu)
... ...
private Form CreateForm(string className,string assemblyName)
string path = Application.StartupPath + "\\" + assemblyName + ".dll";
Assembly ass = Assembly.LoadFile(path);
Form fm = (Form)Assembly.LoadFile(path).CreateInstance(className);
Type fmType = fm.GetType();
if (fmType.GetInterface("IFormBase") != null)
fmType.GetProperty("LoginUser").SetValue(fm, this.LoginUser);
fmType.GetProperty("LoginDept").SetValue(fm, this.LoginDept);
fm.Tag = className;
return fm;
出错位置在“Form fm = (Form)Assembly.LoadFile(path).CreateInstance(className);”这一句。
通过度娘看了很多关于本问题的中文文档,有人提示必须加被加载dll的引用,有人提示cpu架构要保持一致(x86->x86,x64->x64),.Net Framework 框架要一致,甚至数据库是否正常连接。 还有人提示路径不对啥的。按照这些提示的思路去做,真的可能让人越来越产生绝望感。
后来在google上用英文“An exception occurred for the target of the call ”去查找答案,也没有找到直接的答案,但是有位高手的建议帮我找到了问题的真正原因。(参考这篇文章:
Exception has been thrown by the target of an invocation, when COM DLL’s are called by reflection technique in C#)
那就是,**TargetInvocationException掩盖了问题的真正原因,要查看Exception的InnerException。
** 我输出InnerException,内容如下:
异常类型:FileNotFoundException
异常消息:未能加载文件或程序集“Microsoft.ReportViewer.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。
异常信息: 在 CFW.WinForm.FrmMain.AddTabItem(S_Menu menu)
... ...
看到这些信息,瞬间明白加载对象DLL所依赖的Dll文件缺乏导致这次事故!
从上面的信息找到问题原因之后,解决办法就很简单了。本次的解决办法是将缺少的DLL文件放到加载路径相同路径下,就正常了。 当然,解决办法会因问题而异,主要参考InnerException的提示。
首先原谅我将该问题放在首页,情况紧急,实在是没办法了,请各位帮忙!
我用下面语句来创建类型的一个实例: ClassA Obj = (ClassA)Activator.CreateInstance(
问题现象:在C#工程中,抛出了调用的目标发生了异常错误异常问题分析:通过Exception报的错误无法定位到问题原因,可以通过InnerException来详细输出错误信息问题原因:缺少相关依赖
维护SharePoint Application期间,在执行SharePoint Configuration时候遇到错误 "An exception of type System.Reflection.TargetInvocationException was thrown. Additional exception information: Exception has been thrown by the target of an invocation."的解决方案做介绍。
我在用反射创建类的时候,提示“调用的目标发生了异常。”,如下图所示:
我上网找了很久,都没有找到答案,纠结了一下下。我想,这个提示很清楚,就是我的调用类是不是有bug,所以才没有办法用反射创建类呢?我就检查了一下调用的类,后面发现是日志路径出错了,出错代码如下:private void NewLogo()
if (!File.Exists(this.fi
阿里QA导读:在软件研发过程中,发布前跨多个系统的联调测试是不可或缺的一环,而在联调过程中,经常会遇到一些比较棘手的困难,阻塞整个联调进程。其中比较典型的有:第三方的研发节奏不一致,导致...
System.Reflection.TargetInvocationException: 调用的目标发生了异常。
---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。
---> Sy...
最近在做.net core项目,然后就把VS 2017更新到最新版本,以及更新.net core sdk。频繁的更新开发工具,结果就出现了“调用目标发生了异常”,本来运行、调试都是好好的,更新了一下版本,就出现这样的问题,虽然不影响运行使用,但是每执行到一段代码,就弹出“调用目标发生了异常”,特别烦人,到网上查找原因,给出一些方法,但是都是无效的。
有的人说重新安装系统,或者修改path变...
Spring MVC处理异常有3种方式:
1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;
2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;.
1.1 异常概念
异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.
1.2 异常体系
异常机制其实是帮助我们找到程序中的问题,异常的根类是 java.lang.Throwable ,其下有两个子类:
java.lang.Error 与 java
DA_ZD_QIANYI 是我本地报错的窗口设计,然后在Program.cs 中加如下代码:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
Exception ex = e.ExceptionObject as Exception;