2010-10-01 3 views
8

C#Wie lösen: C#

Jedes Mal wenn ich meine porgram laufen bekomme ich diese Ausnahme „Ausnahme durch das Ziel Aufruf ausgelöst wurde“: alt text

Aber wenn ich im Debug-Modus laufen, gibt es keine Ausnahme und das Programm funktioniert gut, was kann ich tun?

HINWEIS: Ich benutze keine invoke() überall im Projekt

EDIT: Okay, hier ist der Code in den Details gefunden: Wenn jemand weiß, wie protoBuff zu verwenden, und kennen dieses Problem ....

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

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

       } 

Ich kann es nicht verstehen, was ist los? Muss ich einen anderen Teil des Codes hinzufügen? Vielleicht die Seralizaion?

+5

Beginnen Sie, indem Sie auf Details klicken und sehen Sie sich die vollständige Ausnahme und Stack-Trace an. –

+0

Tu was Michael gesagt hat. Was ist der eigentliche Fehler? –

+0

Ich habe den Code hinzugefügt, wenn Sie das ganze wollen, sagen Sie es mir einfach. –

Antwort

4

Sie verwenden Protobuf, um etwas zu deserialisieren, das es nicht versteht. Vermutlich werden Daten serialisiert, die eine andere Version Ihrer Assembly oder Daten verwenden, die von Ihnen nicht serialisiert wurden. Google Protocol Buffers können verwendet werden, um eine Repräsentation Ihres Objekts in einen Stream zu schreiben. Sie können den Stream später deserialisieren, um das Objekt neu zu erstellen. Es ist jedoch wichtig, dass Sie das Objekt auf die gleiche Weise serialisieren und deserialisieren. Wenn Sie nur Abfall in die Deserialisierung füttern, werden seltsame Ausnahmen ausgelöst.

Das Problem tritt bei MainForm.cs, Zeile 97

Wenn Sie nur die Fehlermeldung erhalten, wenn Sie im Release-Modus laufen dann vielleicht die Datei, die Sie deserialisieren versuchen, im binären Verzeichnis und der Freigabemodus befindet Datei ist veraltet, das heißt, sie enthält serialisierte Daten einer älteren Version der Daten, die Sie serialisieren.

+0

Ok Ich habe einen Abschnitt in der Hauptpost hinzugefügt, der ein Kommentar zu dir ist –

27

TargetInvocationException maskiert die echte Ausnahme, indem es Ihnen mitteilt, dass es während eines "Methodenaufrufs" abgestürzt ist, normalerweise über something.Invoke.

Was Sie tun müssen, ist die InnerException Eigenschaft des Ausnahmeobjekts (das Objekt TargetInvocationException), dies wird Ihnen die tatsächliche Ausnahme, die geworfen wurde, mit einem nützlicheren Stack-Trace geben.

+1

innere Ausnahme hatte alle Details, die ich brauchte, um dies für mich zu lösen, es war in der Tat eine "Invalid Cast Exception" in meinem Fall. – Niklas

0

In meinem Fall habe ich MD5-Kryptographie verwendet, wo als FIPS was enabled on server. Ich benutzte SHA1, um Hash zu berechnen, und es arbeitete für mich.