【问题标题】:How to solve: "exception was thrown by the target of invocation" C#如何解决:“调用目标引发异常”C#
【发布时间】:2010-10-01 11:11:03
【问题描述】:

C#

每次我运行我的 porgram 我都会得到这个异常:

但是当我在调试模式下运行时,没有异常,程序运行正常,我该怎么办?

注意:我不在项目中的任何地方使用 invoke()

编辑:好的,下面是详细信息中的代码: 如果有人知道如何使用protoBuff,并且知道这个问题....

    ************** Exception Text **************
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> ProtoBuf.ProtoException: Incorrect wire-type deserializing TimeSpan
   at ProtoBuf.ProtoBcl.ProtoTimeSpan.DeserializeTicks(SerializationContext context) in c:\protobuf-net_fixed\trunk\protobuf-net\ProtoBcl\ProtoTimeSpan.cs:line 80
   at ProtoBuf.ProtoBcl.ProtoTimeSpan.DeserializeDateTime(SerializationContext context) in c:\protobuf-net_fixed\trunk\protobuf-net\ProtoBcl\ProtoTimeSpan.cs:line 41
   at ProtoBuf.Property.PropertyDateTimeString`1.DeserializeImpl(TSource source, SerializationContext context) in c:\protobuf-net_fixed\trunk\protobuf-net\Property\PropertyDateTimeString.cs:line 32
   at ProtoBuf.Property.Property`2.Deserialize(TSource source, SerializationContext context) in c:\protobuf-net_fixed\trunk\protobuf-net\Property\Property.cs:line 150
   at ProtoBuf.Serializer`1.Deserialize[TCreation](T& instance, SerializationContext context) in c:\protobuf-net_fixed\trunk\protobuf-net\SerializerT.cs:line 568
   at ProtoBuf.Serializer`1.DeserializeChecked[TCreation](T& instance, SerializationContext source) in c:\protobuf-net_fixed\trunk\protobuf-net\SerializerT.cs:line 400
   at ProtoBuf.SerializerItemProxy`2.Deserialize(TActualClass& instance, SerializationContext source) in c:\protobuf-net_fixed\trunk\protobuf-net\SerializerProxy.cs:line 86
   at ProtoBuf.Serializer.Deserialize[T](SerializationContext source) in c:\protobuf-net_fixed\trunk\protobuf-net\Serializer.cs:line 302
   at ProtoBuf.Serializer.Deserialize[T](Stream source) in c:\protobuf-net_fixed\trunk\protobuf-net\Serializer.cs:line 289
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at ProtoBuf.Serializer.NonGeneric.Deserialize(Type type, Stream source) in c:\protobuf-net_fixed\trunk\protobuf-net\NonGeneric.cs:line 154
   at ProtoBuf.Serializer.NonGeneric.TryDeserializeWithLengthPrefix(Stream source, PrefixStyle style, Getter`2 typeReader, Object& item) in c:\protobuf-net_fixed\trunk\protobuf-net\NonGeneric.cs:line 128
   at AccessPoint.MainForm.getEventsList() in C:\Users\user\Desktop\accesspoint\AccessPoint\AccessPoint\MainForm.cs:line 97
   at AccessPoint.MainForm.Form1_Load(Object sender, EventArgs e) in C:\Users\user\Desktop\accesspoint\AccessPoint\AccessPoint\MainForm.cs:line 18
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

第 97 行:

int startIndex = count - 10, index = 0;
                object obj;
                while (Serializer.NonGeneric.TryDeserializeWithLengthPrefix(file, PrefixStyle.Base128, tag =>
                {
                    return index++ >= startIndex ? typeof(EventsWireFrame) : null;
                }, out obj))
                {
                    EventsWireFrame evt = (EventsWireFrame)obj;
                    AddEventToTable(evt.eventDate, evt.eventType, evt.eventKeyNumber, evt.eventKeyName, evt.eventDoor, true);

                }

我听不懂,怎么了?我需要添加另一部分代码吗?也许是seraliztaion?

【问题讨论】:

  • 首先单击详细信息,然后查看完整的异常和堆栈跟踪。
  • 照迈克尔说的做。实际错误是什么?
  • 我添加了代码,如果你想要完整的,请告诉我。
  • 可能是 bin\Debug 文件夹中存在但 bin\Release 文件夹中不存在的文件。
  • 两者都应该存在?

标签: c# .net exception


【解决方案1】:

TargetInvocationException 通过告诉您它在“方法调用”期间崩溃(通常通过something.Invoke)来掩盖真正的异常。

您要做的是查看异常对象(TargetInvocationException 对象)的 InnerException 属性,这将为您提供实际抛出的异常,以及更有用的堆栈跟踪。

【讨论】:

  • inner exception 包含了我需要为我解决这个问题的所有细节,在我的情况下它确实是一个 Invalid Cast Exception
  • 是的,但是InnerException 缺少行号(确切地抛出异常的位置),为什么?我从加载的程序集中调用方法,程序集是在调试模式下构建的。
【解决方案2】:

您正在使用Protobuf 反序列化它不理解的内容。可能是使用您的程序集的另一个版本序列化的数据或您最初未序列化的数据。 Google 协议缓冲区可用于将对象的表示形式写入流。您可以稍后反序列化流以重新创建对象。但是,以相同的方式序列化和反序列化对象很重要。如果你只是在反序列化中输入垃圾,你会抛出奇怪的异常。

问题出现在 MainForm.cs 第 97 行。

如果您只是在发布模式下运行时出现错误,那么您尝试反序列化的文件可能位于二进制目录中,并且发布模式文件已过期,即它包含较旧的序列化数据您正在序列化的数据的版本。

【讨论】:

  • 好的,我在主帖中添加了一个对你的评论
【解决方案3】:

在我的情况下,我使用的是 MD5 加密,其中FIPS was enabled on server。 我使用 SHA1 来计算哈希,它对我有用。

【讨论】:

    【解决方案4】:

    对我来说,XAML 项目的 OnLoad() 中有一些空引用(它引发了 OP 的模糊错误)。正如 Lasse Vågsæther Karlsen 回答的那样,查看内部异常的堆栈跟踪让我找到了行号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2015-11-16
      • 2018-11-08
      • 2018-02-14
      相关资源
      最近更新 更多