Как решить: "исключение было сгенерировано целью вызова" C # - PullRequest
14 голосов
/ 01 октября 2010

C #

Каждый раз, когда я запускаю свою программу, я получаю следующее исключение: alt text

Но когда я работаю в режиме отладки, исключения не возникает, и программа работает нормально, что можетЯ делаю?

ПРИМЕЧАНИЕ: Я не использую 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?

Ответы [ 4 ]

35 голосов
/ 01 октября 2010

TargetInvocationException маскирует реальное исключение, сообщая вам, что оно аварийно завершилось во время «вызова метода», обычно через something.Invoke.

Что вам нужно сделать, это посмотреть на InnerException свойство объекта исключения (объект TargetInvocationException ), это даст вам фактическое сгенерированное исключение с более полезной трассировкой стека.

4 голосов
/ 01 октября 2010

Вы используете Protobuf для десериализации чего-то, чего он не понимает.Вероятно, данные сериализуются с использованием другой версии вашей сборки или данные, которые вы не сериализовали в первую очередь.Буферы протокола Google можно использовать для записи представления вашего объекта в поток.Позже вы можете десериализовать поток, чтобы воссоздать объект.Однако важно, чтобы вы сериализовали и десериализовали объект таким же образом.Если вы просто загрузите мусор в десериализацию, вы получите странные исключения.

Проблема возникает в MainForm.cs, строка 97.

Если ошибка появляется только при запуске в режиме выпускатогда, возможно, файл, который вы пытаетесь десериализовать, находится в двоичном каталоге, а файл режима выпуска устарел, то есть содержит сериализованные данные более старой версии данных, которые вы сериализуете.

0 голосов
/ 26 августа 2018

Для меня было несколько нулевых ссылок в OnLoad () проекта XAML (и это приводило к туманной ошибке OP). Как только Лассе Вогстер Карлсен ответил, просмотр трассировки стека внутреннего исключения привел меня к номеру строки.

0 голосов
/ 22 октября 2015

В моем случае я использовал криптографию MD5, где было включено *1001* FIPS на сервере . Я использовал SHA1 для вычисления хэша, и он работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...