2010-10-01 18 views
8

C#Come risolvere: "eccezione è stata generata dalla destinazione di chiamata" C#

Ogni volta che eseguo il mio porgram ottengo questa eccezione: alt text

Ma quando ho eseguito in modalità debug, non c'è nessuna eccezione e il programma funziona bene, cosa posso fare?

NOTA: Non faccio uso di invoke() in qualsiasi parte del progetto di

EDIT: Va bene, ecco il codice trovato nei dettagli: Se qualcuno sa come usare protoBuff, e conoscere questo 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) 

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

       } 

Non riesco a capirlo, cosa c'è che non va? Devo aggiungere un'altra parte di codice? Forse il seraliztaion?

+5

Iniziare facendo clic su Dettagli e dare un'occhiata all'eccezione completa e alla traccia dello stack. –

+0

Fai quello che ha detto Michael. Qual è l'errore effettivo? –

+0

Ho aggiunto il codice, se vuoi il pieno, dimmelo. –

risposta

4

Si sta utilizzando Protobuf per deserializzare qualcosa che non capisce. Probabilmente i dati sono serializzati utilizzando un'altra versione dell'assieme o dati non serializzati da te in primo luogo. I buffer del protocollo Google possono essere utilizzati per scrivere una rappresentazione del tuo oggetto su un flusso. È possibile successivamente deserializzare lo stream per ricreare l'oggetto. Tuttavia, è importante serializzare e deserializzare l'oggetto nello stesso modo. Se si alimenta la spazzatura nella deserializzazione, si generano strane eccezioni generate.

Il problema si verifica a MainForm.cs, linea 97.

Se si ottiene solo l'errore quando si esegue nella modalità di rilascio allora forse il file che si sta tentando di deserializzare si trova nella directory di binario e la modalità di rilascio il file non è aggiornato, ovvero contiene dati serializzati di una versione precedente dei dati che si sta serializzando.

+0

Ok ho aggiunto una sezione nel post principale che è un commento per te –

27

TargetInvocationException maschera la vera eccezione segnalando che si è arrestato durante "l'invocazione di un metodo", in genere tramite something.Invoke.

Quello che dovete fare è guardare la proprietà InnerException dell'oggetto di eccezione (l'oggetto TargetInvocationException), questo vi darà l'eccezione effettiva che è stata generata, con una traccia dello stack più utile.

+1

eccezione interna aveva tutti i dettagli che mi servivano per risolvere questo per me, era davvero un 'eccezione di cast non valida nel mio caso. – Niklas

0

Nel mio caso stavo usando la crittografia MD5 dove come FIPS was enabled on server. Ho usato SHA1 per calcolare l'hash e il suo ha funzionato per me.

Problemi correlati