我用下面语句来创建类型的一个实例:
ClassA Obj = (ClassA)Activator.CreateInstance(tasktype);
其中tasktype是Type类型在执行上述语句时抛出异常:
Exception has been thrown by the target of an invocation..我在本地是好的,但在服务器上却抛出该异常。
本人在网上搜索了一下,说可能是.net FrameWork版本问题,但是编译时都是.net FrameWork 2.0编译,请问有没有知道原因的,很紧急。非常感谢!
提供方法都可以得分。
ClassA Obj = (ClassA)Activator.CreateInstance(tasktype);
其中tasktype是Type类型在执行上述语句时抛出异常:
Exception has been thrown by the target of an invocation..我在本地是好的,但在服务器上却抛出该异常。
本人在网上搜索了一下,说可能是.net FrameWork版本问题,但是编译时都是.net FrameWork 2.0编译,请问有没有知道原因的,很紧急。非常感谢!
提供方法都可以得分。
建议删除当前的 framework 和打上最新的 Service Pack
objType = Assembly.Load(path).CreateInstance("类名");
真的不行了问问你的服务器提供商
object objType;
objType = Assembly.Load(path).CreateInstance("类名");
2、确保 服务器上的 iis 网站的 .net 版本为 2.0
1、你所指的“两个类型”是“要实例化对象的类”和“转化的类”吗?即“ClassA”和tasktype吗?
我这两个类的关系其实是继承关系,tasktype的类是继承ClassA的。这样会不会有问题,都没用到接口。
2、服务器的版本是.Net FrameWork 2.0
windows 2003 操作系统
.net FrameWork 2.0 + sp1补丁我后来在本机也装了sp1补丁,还是没报错。真的要崩溃了
Source:mscorlib,
Message:Exception has been thrown by the target of an invocation.,
StackTrace: at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at TaskScheduler.TTaskManager.PrepareTaskQueue() in c:\TaskScheduler\TaskManager.cs:line 94
at TaskScheduler.TTaskManager..ctor() in c:TaskScheduler\TaskManager.cs:line 64
at TaskScheduler.TTaskScheduler.RunTasks(Object sender) in c:\TaskScheduler\TaskScheduler.cs:line 58.
原因分析:
1、在类的实例化时,调用构造函数时,抛出了异常,而该异常信息并不会抛出到外面来,所以在外面只能看到的是“Exception has been thrown by the target of an invocation..”。
try
{
ClassA Obj = (ClassA)Activator.CreateInstance(tasktype);
}
catch(Exception ex)
{
//此处的异常只会报Exception has been thrown by the target of an invocation 并不会报构造函数的异常
} 2、为什么在本地是好的,而在服务器上就不行了呢。这个问题我本应该早就要考虑到的,但是实在有点隐蔽,导致一开始没有想到。
原因是构造函数里的一个方法中与数据库的数据有关系,然而服务器上的数据不正常(很诡异的),导致某一个地方发生了错误。所以我在N多的机器上测试都是正常的,唯独就在服务器上不行。
不过想想,这也说明我的程序考虑的不到位,今后一定要注意了。
另外,通过这个问题给我一个启发,在查问题时,不要总抠着那个错误去想,应该从多方面想想。我当初看这个错误是那个实例化过程抛出的,我就认为肯定是这个实例化的方法有问题,我就一直查这个方法的用法,并且我还找了其他的实例化的方法,结果都以失败告终。所以要多想想其他可能会出现错误的地方并且要深入一点看问题。
总之,查出了问题很高兴,总算松了一口气。感谢大家对我的帮助!不甚感激! 终于可以结贴了,人太多,分不是很多,勿怪。