Visual Studio-Add-in stürzt ab mit der Fehlermeldung "TargetInvocationException"

Problembeschreibung

Wenn ein Add-in oder Integrationspaket, kann Microsoft Visual Studio 2013 unerwartet eine nicht behandelte Ausnahme des Typs System.Reflection.TargetInvocationException beenden.

Im Ereignisprotokoll Anwendung wird ein Anwendungsfehler mit ähnlichen Text angezeigt:

Fehlgeschlagene Anwendungsname: devenv.exe, Version: 12.0.21005.1 Uhrzeit: 0x524fcb34
Fehlgeschlagene Modulname: KERNELBASE.dll, Version: 6.1.7601.18229 Uhrzeit: 0x51fb10c6
Ausnahmecode: 0xe0434352
Fehleroffset: 0x0000812f
Fehlerhaften Prozess-Id: 0xe3c
Fehlgeschlagene Anwendung Startzeit: 0x01cf0b21c6346ea8
Fehlgeschlagene Anwendungspfad: C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
Fehlgeschlagenes Modulpfad: C:\Windows\system32\KERNELBASE.dll

Ein Ereignis mit .NET Runtime als Quelle mit Text wie folgt:

Anwendung: devenv.exe
Framework-Version: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer Ausnahme beendet.
Ausnahme-Info: System.Reflection.TargetInvocationException
Stapel:
Bei System.RuntimeMethodHandle.InvokeMethod (System.Object, System.Object [], System.Signature, Boolean)
Bei System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (System.Object, System.Object [], System.Object[])
am System.Delegate.DynamicInvokeImpl(System.Object[])
Bei System.Windows.Threading.ExceptionWrapper.InternalRealCall (System.Delegate, System.Object, Int32)
MS. Internal.Threading.ExceptionFilterHelper.TryCatchWhen (System.Object System.Delegate System.Object, Int32, System.Delegate)
am System.Windows.Threading.DispatcherOperation.InvokeImpl()
am System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
Bei System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext System.Threading.ContextCallback, System.Object, Boolean)
Bei System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext System.Threading.ContextCallback, System.Object, Boolean)
Bei System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext System.Threading.ContextCallback, System.Object)
am System.Windows.Threading.DispatcherOperation.Invoke()
am System.Windows.Threading.Dispatcher.ProcessQueue()
Bei System.Windows.Threading.Dispatcher.WndProcHook (IntPtr Int32 IntPtr, IntPtr, Boolean ByRef)
MS. Win32.HwndWrapper.WndProc (IntPtr Int32 IntPtr, IntPtr, Boolean ByRef)
MS. Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
Bei System.Windows.Threading.ExceptionWrapper.InternalRealCall (System.Delegate, System.Object, Int32)
MS. Internal.Threading.ExceptionFilterHelper.TryCatchWhen (System.Object System.Delegate System.Object, Int32, System.Delegate)
Bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl (System.Windows.Threading.DispatcherPriority System.TimeSpan System.Delegate, System.Object, Int32)
MS. Win32.HwndSubclass.SubclassWndProc (IntPtr Int32 IntPtr, IntPtr)

Ursache

Dieses Problem tritt auf, weil ein in der Visual Studio-IDE 2013 ändern und wirkt sich auf Dokumente, die nicht gültigen Pfadnamen von .NET System.IO.File-Klasse analysiert. Visual Studio kann eine System.ArgumentException auslösen, wenn diese Dokumente der IDE als die beiden oben weitergegeben wird.

Problemlösung

Sie können vermeiden oder das Problem umgehen, indem sicherstellen, dass die Dokumentnamen gültige Win32-Dateinamen sind.

Dieses Problem wurde in Visual Studio 2013 Update 2 und höheren Versionen von Visual Studio behoben.

Weitere Informationen

Nachfolgend finden Sie ein Beispiel Aufrufliste eines der beiden. Dies ist aus einer Abbilddatei Prozess Ausnahmefehler erfasst und in die SOS-Erweiterung anzuzeigenden Aufruflisten verwalteten Ausnahme mit WindDdbg-Debugger angezeigt:


CLR Ausnahmetyp: System.Reflection.TargetInvocationException
"Durch ein Aufrufziel Ausnahme ist aufgetreten."
Fehler: Symbol-Datei konnte nicht gefunden werden.  Standardmäßig exportiert Symbole für C:\Windows\system32\KERNELBASE.dll-
eax=0027eb88 ebx=00000005 ecx=00000005 edx=00000000 esi=0027ec48 edi=00000001
EIP = 7528812f esp = 0027eb88 Ebp = 0027ebd8 Iopl = 0 nv, Ei pl Nz Ac Pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00200216
KERNELBASE!RaiseException+0x54:
7528812f c9 lassen
0:000 >! Loadby sos Clr
0:000> !sos.PrintException
Exception-Objekt: 136eb7f8
Ausnahmetyp: System.Reflection.TargetInvocationException
Meldung: Durch ein Aufrufziel Ausnahme ist aufgetreten.
InnerException: System.ArgumentException verwenden! PrintException 136e9f10 mehr sehen.
StackTrace (generiert):
SP-IP-Funktion
00000000 00000001 Mscorlib_ni! System.RuntimeMethodHandle.InvokeMethod (System.Object, System.Object [], System.Signature, Boolean) + 0 x 2
0033BEC8 60D99BC1 Mscorlib_ni! System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (System.Object, System.Object [], System.Object[])+0xc1
    0033BEEC 60D904B6 mscorlib_ni!System.Delegate.DynamicInvokeImpl(System.Object[])+0x76
    0033BF00 6079C5BD WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)+0xad
    0033BF20 6079C49A WindowsBase_ni!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)+0x3a
    0033BF64 6079EE4C WindowsBase_ni!System.Windows.Threading.DispatcherOperation.InvokeImpl()+0xac
    0033BF9C 6079ED88 WindowsBase_ni!System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)+0x38
    0033BFA4 60E14157 mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0xa7
    0033C010 60E14096 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x16
    0033C024 60E14051 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+0x41
    0033C03C 6079EC9B WindowsBase_ni!System.Windows.Threading.DispatcherOperation.Invoke()+0x5b
    0033C074 6079B21B WindowsBase_ni!System.Windows.Threading.Dispatcher.ProcessQueue()+0x16b
0033C0B8 6079B3DA WindowsBase_ni! System.Windows.Threading.Dispatcher.WndProcHook (IntPtr Int32 IntPtr, IntPtr, Boolean ByRef) + 0x5a
0033 C 104 6079C75B WindowsBase_ni! MS. Win32.HwndWrapper.WndProc (IntPtr Int32 IntPtr, IntPtr, Boolean ByRef) + 0x9b
    0033C140 6079C6AB WindowsBase_ni!MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)+0x6b
    0033C150 6079C562 WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)+0x52
    0033C170 6079C49A WindowsBase_ni!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)+0x3a
    0033C1B4 6079AABE WindowsBase_ni!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)+0x10e
0033 C 208 6079BFF1 WindowsBase_ni! MS. Win32.HwndSubclass.SubclassWndProc (IntPtr Int32 IntPtr, IntPtr) + 0xf1
00000000 00000001 System_Windows_Forms_ni! System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop (IntPtr, Int32, Int32) + 0 x 2
0033C4D8 5C35DFC7 System_Windows_Forms_ni!System.Windows.Forms.ComponentManagerProxy.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (IntPtr, Int32, Int32) + 0 x 27
    0033C4F0 5BBBF8D1 System_Windows_Forms_ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)+0x155
    0033C540 5BBBF742 System_Windows_Forms_ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)+0x4a
    0033C56C 5BB67004 System_Windows_Forms_ni!System.Windows.Forms.Application.DoEvents()+0x18
    0033C574 0682B972 MyAddin!Initialize()+0x6fa

StackTraceString: < keine >
HResult: 80131604

Die InnerException zeigt die ursprüngliche Ausnahme:

0:000> !PrintException 136e9f10
Exception-Objekt: 136e9f10
Ausnahmetyp: System.ArgumentException
Meldung: Unzulässige Zeichen im Pfad.
InnerException: < keine >
StackTrace (generiert):
SP-IP-Funktion
    0033BA18 617FFD07 mscorlib_ni!System.IO.Path.CheckInvalidPathChars(System.String, Boolean)+0xa68db7
    0033BA28 60E05936 mscorlib_ni!System.IO.Path.GetExtension(System.String)+0x16
    0033BA40 6D60F8E7 Microsoft_VisualStudio_Shell_UI_Internal_ni!Microsoft.VisualStudio.Services.VsImageService.GetIconForFileEx(System.String, Microsoft.VisualStudio.Shell.Interop.__VSUIDATAFORMAT, Microsoft.VisualStudio.Shell.Interop.__VSIconSource ByRef)+0x3f
    0033BA64 6D60F88C Microsoft_VisualStudio_Shell_UI_Internal_ni!Microsoft.VisualStudio.Services.VsImageService.GetIconForFileEx(System.String, Microsoft.VisualStudio.Shell.Interop.__VSUIDATAFORMAT, UInt32 ByRef)+0x14
    0033BA74 16D5ABD8 Microsoft_VisualStudio_Platform_WindowManagement_ni!Microsoft.VisualStudio.Platform.WindowManagement.UtilityMethods.GetDocumentTabImage(System.String, Microsoft.VisualStudio.Shell.Interop.__TABIMAGEFLAGS ByRef)+0x38
    0033BA90 6DE8F8F6 Microsoft_VisualStudio_Platform_WindowManagement_ni!Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.UpdateDocumentIcon()+0x131e2a

StackTraceString: < keine >
HResult: 80070057

Eine bekannte Ursache ist Anführungszeichen in den Namen des Dokuments eingebettet haben. Wird C#-Code zeigt die innere Ausnahme lautet wie folgt:

static void Main(string[] args) { string path = null; path = @"A09F9925-32BC-47E1-9DC0-1F71C64E9A6E@SAMPLE.""ADEFUSR0"""; string extension = System.IO.Path.GetExtension(path); }
Dieser Code löst die System.ArgumentException GetExtension Aufruf.
Eigenschaften

Artikelnummer: 2923556 – Letzte Überarbeitung: 20.01.2017 – Revision: 1

Feedback