2010-10-01 26 views
8

C#¿Cómo resolver: "excepción fue arrojado por el destino de la invocación" C#

Cada vez que paso la porgram consigo esta excepción: alt text

Pero cuando corro en modo de depuración, hay sin excepción y el programa funciona bien, ¿qué puedo hacer?

NOTA: No consumo invoke() en cualquier parte del proyecto

EDIT: bien, aquí es el código que se encuentra en los detalles: Si alguien sabe cómo usar protoBuff, y conocer este problema ....

************** 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) 

Fila 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); 

       } 

No puedo obtenerlo, ¿qué ocurre? ¿Debo agregar otra parte del código? Tal vez la seraliztaion?

+5

Comience haciendo clic en Detalles y observe la excepción completa y el seguimiento de la pila. –

+0

Haz lo que dijo Michael. ¿Cuál es el error real? –

+0

Agregué el código, si quieres el completo, solo dímelo. –

Respuesta

4

Está utilizando Protobuf para deserializar algo que no entiende. Probablemente los datos se serializaron usando otra versión de su ensamblaje o datos no serializados por usted en primer lugar. Los búfers de protocolo de Google se pueden utilizar para escribir una representación de su objeto en una secuencia. Luego puede deserializar la secuencia para recrear el objeto. Sin embargo, es importante que serialice y deserialice el objeto de la misma manera. Si solo le das basura a la deserialización, recibirás extrañas excepciones.

El problema se produce en MainForm.cs, línea 97.

Si sólo obtiene el error cuando se ejecuta en modo de lanzamiento entonces tal vez el archivo que intenta deserializar se encuentra en el directorio binario y el modo de liberación el archivo está desactualizado, es decir, contiene datos serializados de una versión anterior de los datos que está serializando.

+0

Ok, agregué una sección en la publicación principal que es un comentario –

27

TargetInvocationException enmascara la verdadera excepción de que le dice que se estrelló durante "una invocación de método", generalmente a través de something.Invoke.

Lo que tienes que hacer es mirar la propiedad InnerException del objeto de excepción (el objeto TargetInvocationException), esto te dará la excepción real que se lanzó, con un seguimiento de pila más útil.

+1

excepción interna, tenía todos los detalles que necesitaba para resolver esto por mí, de hecho era una 'Excepción de lanzamiento inválida' en mi caso. – Niklas

0

En mi caso estaba usando la criptografía MD5 donde FIPS was enabled on server. Utilicé SHA1 para calcular el hash y funcionó para mí.

Cuestiones relacionadas