2014-06-09 15 views
10

Pracuję nad aplikacją WPF. Otrzymuję ten błąd tylko w czasie wykonywania na pojedynczym urządzeniu.Informacje o wyjątku: System.Reflection.TargetInvocationException

Exception Info: System.Reflection.TargetInvocationException 

Moje pytanie:

  • Wszelkie wskazówką tego, co może być przyczyną tego błędu?
  • Każdy pomysł jak debugować aplikację w trybie zwolnienia?

Exception Info: System.Reflection.TargetInvocationException 
Stack: 
    at System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[]) 
    at System.Delegate.DynamicInvokeImpl(System.Object[]) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.DispatcherOperation.InvokeImpl() 
    at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) 
    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 
    at System.Windows.Threading.DispatcherOperation.Invoke() 
    at System.Windows.Threading.Dispatcher.ProcessQueue() 
    at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) 
    at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.DispatcherOperation.Wait(System.TimeSpan) 
    at System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherOperation, System.Threading.CancellationToken, System.TimeSpan) 
    at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) 
    at WPF.DataModel.WPFDataSource.LoadData() 
    at WPF.DataModel.WPFDataSource.DownloadNewData(Boolean) 
    at WPF.DataModel.WPFDataSource.Load(Boolean) 
    at WPF.App.OnStartup(System.Windows.StartupEventArgs) 
    at System.Windows.Application.<.ctor>b__1(System.Object) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.DispatcherOperation.InvokeImpl() 
    at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) 
    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 
    at System.Windows.Threading.DispatcherOperation.Invoke() 
    at System.Windows.Threading.Dispatcher.ProcessQueue() 
    at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) 
    at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.Dispatcher.Run() 
    at System.Windows.Application.RunDispatcher(System.Object) 
    at System.Windows.Application.RunInternal(System.Windows.Window) 
    at System.Windows.Application.Run(System.Windows.Window) 
    at WPF.App.Main() 

Odpowiedz

13

To wyjątek otoki, że po prostu mówi, że odzwierciedleniem .Invoke() (lub podobny) nie powiodła się. Aby dowiedzieć się, co nie udało się , należy spojrzeć na zawinięty wyjątek, poprzez .InnerException. Zawiera prawdziwy błąd .

Więc: gdziekolwiek to łapiesz, po prostu sprawdź ex.InnerException. I .InnerException tego, jeśli jedno itd. - całkowicie w dół.

5

Należy umieścić tę część kodu wewnątrz try/bloku catch i złapać TargetInvocationException i zobaczyć wewnętrzny wyjątek to daje bardziej szczegółowe powody

Wyjątek ten może dostarczyć więcej informacji, co jest problemem, a to oznacza odbicie .Invoke() nie powiodło się.

Aby uzyskać więcej informacji: -

Jak sugerowano w oficjalnej stronie tutaj http://support.microsoft.com/kb/828991: -

pojawić się błąd System.Reflection.TargetInvocationException ponieważ common language runtime wywołuje metodę MethodInfo.Invoke za pomocą refleksji.

Podczas ładowania złożenia za pomocą metody Assembly.LoadFrom, środowisko wykonawcze wspólnego języka umieszcza załadowany zespół w kontekście LoadFrom aplikacji. Dowolne sondy dla zależności w zespole sondują bieżący katalog aplikacji. Jeśli ta sonda zakończy się niepowodzeniem, środowisko wykonawcze wspólnego języka sonduje kontekst aplikacji LoadFrom z poziomu .

Można załadować zespół o prostej nazwie o nazwie, która ma taką samą nazwę pliku jak plik w bieżącym katalogu aplikacji. Podczas próby wywołania metody w załadowanym zespole za pomocą metody MethodInfo.Invoke, a wywoływana metoda korzysta z zależności, , środowisko wykonawcze wspólnego języka najpierw bada bieżącą ścieżkę katalogu. Gdy w środowisku wykonawczym wspólnego języka znajduje się nazwa pliku o tej samej nazwie, , sonda zostaje zatrzymana. Jeśli jednak ten plik nie ma wartości , nie ma tej samej tożsamości zespołu co zależność, powiązanie zestawu nie powiedzie się, a środowisko wykonawcze wspólnego języka generuje błąd System.IO.FileLoadException, który jest przekazywany do błędu wyjątku System.Reflection.TargetInvocationException .W związku z tym można odnotować zachowanie wymienione w sekcji "Symptomy".

Powiązane problemy