.NET impossible de démarrer l'application et de recevoir des XamlParseException
J'ai écrit une application qui permet d'installer et de travailler sur mon PC de développement (une Fenêtre 7).
- Environnement de développement: Window 7, VS2010 WPF C# avec les deux .NET 4 et .NET 3.5 installé
Sur d'autres ordinateur client (XP SP3, 2 et 1), il installer sans erreur, mais ne peut pas démarrer. Dans le gestionnaire des tâches, je peux voir l'application qui prend de la mémoire brièvement avant de fermer par lui-même.
J'avais fait sûr .NET 3.5 cohérence à l'échelle de développer mon PC et divers client XP machines suivantes:
- L'application des objectifs .NET 3.5 (ou 3.5 Client Profile)
- Utilisation VS2010 programme d'installation pour le déploiement: les objectifs .NET 3.5 dans la Condition de Lancement
- Aucune erreur de quelque nature que ce soit .NET de compatibilité lors de débogage de l'application et du projet de l'installateur
eventvwr pris l'avertissement suivant:
¬º˛¿‡–Õ: ¥ÌŒÛ
¬º˛¿¥‘¥: .NET Runtime
¬º˛÷÷¿‡: Œfi
¬º˛ ID: 1026
»’∆⁄: 2011-10-18
¬º˛: 15:18:32
”√ªß: N/A
º∆À„ª˙: WWW-9DB69D5A3AF
√Ë ˆ:
Application: Foo.exe
Framework Version: v4.0.30319
Description: ”…”⁄Œ¥æ≠¥¶¿Ìµƒ“Ï≥££¨Ω¯≥Ã÷’÷π°£
“Ï≥£–≈œ¢: System.Windows.Markup.XamlParseException
∂—’ª:
‘⁄ System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri)
‘⁄ System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
‘⁄ System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
‘⁄ System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
‘⁄ System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext)
‘⁄ System.Windows.Application.LoadComponent(System.Uri, Boolean)
‘⁄ System.Windows.Application.DoStartup()
‘⁄ System.Windows.Application.<.ctor>b__1(System.Object)
‘⁄ System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
‘⁄ MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
‘⁄ System.Windows.Threading.DispatcherOperation.InvokeImpl()
‘⁄ System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
‘⁄ System.Threading.ExecutionContext.runTryCode(System.Object)
‘⁄ System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
‘⁄ System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
‘⁄ System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
‘⁄ System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
‘⁄ System.Windows.Threading.DispatcherOperation.Invoke()
‘⁄ System.Windows.Threading.Dispatcher.ProcessQueue()
‘⁄ 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)
‘⁄ System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
‘⁄ MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
‘⁄ System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
‘⁄ MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
‘⁄ MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
‘⁄ System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
‘⁄ System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
‘⁄ System.Windows.Threading.Dispatcher.Run()
‘⁄ System.Windows.Application.RunDispatcher(System.Object)
‘⁄ System.Windows.Application.RunInternal(System.Windows.Window)
‘⁄ System.Windows.Application.Run(System.Windows.Window)
‘⁄ System.Windows.Application.Run()
‘⁄ FooSoftware.App.Main()
”–πÿ∏¸∂‡–≈œ¢£¨«Î≤Œ‘ƒ‘⁄ http://go.microsoft.com/fwlink/events.asp µƒ∞Ô÷˙∫Õ÷ß≥÷÷––ƒ°£
il y avait cette XamlParseException la cause de mes app pour ne pas démarrer sur XP, la Fenêtre de la Machine. Ce qui se passe?
- Avez-vous vérifier eventvwr sur ces machines?
- oui..pas tout informatif.
- J'ai édité ma question avec une exception, j'ai trouvé dans eventvwr, mais pas de solution pour le moment.
- Essayez de construire explicitement pour x86 au lieu de 'CPU'. Je m'attends à une "mauvaise image" format si cela fait une différence, mais on ne sait jamais.
- Avez-vous essayé différentes XP machines? Ou seulement un?
- J'ai ce problème sur un ordinateur client de milliers de personnes. C'est le moteur me batty!
Vous devez vous connecter pour publier un commentaire.
XamlParseException
est le générique de l'erreur qui se produit quand il ya un problème au démarrage de l'application. Je vous suggère de modifier vous du démarrage de l'application du code de tracer ce qui se passe vraiment et d'obtenir, non seulement la XamlParseException, mais aussi à l'intérieur d'exception(s) qui devrait vous aider à déterminer le problème à la racine. Voici un exemple:base.OnStartup()
Pour commencer, vous pensez réellement avoir plus de chance si vous avez construit sur VS2010 .. mais en fait ciblées pour un inférieur version de .Net (3.5, ou même 2.0).
Qu'il serait certainement utile si vous publiez un peu de code.
Assurez-vous que vous avez copié tous les fichiers nécessaires pour votre application (app.config, etc).
Ce lien semble similaire:
.NET 4 Programme écrit/compilé sur la machine Windows 7 ne fonctionne pas sur XP
Et il pointe à ces excellents conseils de dépannage:
À L'Aide De La Visionneuse Du Journal De Fusion
Vous pouvez débogage à distance. En gros, cela se fait par l'installation de remote debug serveur sur la machine cible, et fixez-le à partir de votre visual studio lorsque vous démarrez l'application. Certains plus d'informations peuvent être trouvées ici : http://msdn.microsoft.com/en-us/library/bt727f1t.aspx
et il y a un peu âgées tutoriel ici : http://www.cprogramming.com/tutorial/visual_studio_remote_debugging.html
Veuillez noter que vous devez déployer avec les symboles de débogage (pdb) et le logiciel de débogage doit être dans la même version que votre code est en.
Bien que vous avez été de mieux les cibler .NET 3.5 votre client hat .NET 4 installé et utilisé. La chaîne
ne me dire cela.
À la force de votre client afin de les utiliser .NET 3.5, vous devez ajouter un App.config à votre application et d'ajouter:
Il se pourrait que vous obtenez une exception parce que .NET 4 traite votre XAML d'une manière différente. Avez-vous essayer de faire votre demande de s'exécuter .NET 4? Si vous n'avez pas d'Application.config fourni vous n'avez tester votre application avec .NET Framework 4 de toute façon même si vous n'avez cible .NET Framework 3.5.
Si votre client est assez sympa, vous pouvez le laisser créer un fichier de vidage de sorte que vous avez un moyen facile de déboguer directement.
Télécharger Procdump de la suite d'outils SysInternals et l'envoyer avec votre demande à votre client. Le laisser exécuter
Cela va générer un processus complet de vidage pour chaque exception non gérée et un autre lorsque le processus se termine dans le répertoire %TEMP%. Visual Studio 2010 a obtenu beaucoup mieux l'analyse de l'image de soutien de sorte que vous devriez être en mesure de l'analyser au sein de Visual Studio 2010.
Si cela n'aide pas, vous pouvez télécharger Windbg (32 bits ici), de charger le fichier de vidage et de type
!analyze-v
pour voir ce que la dernière exception a été. Cela devrait faire l'affaire. Il peut y avoir des problèmes avec les extensions managées pour charger le droit dll de débogage (sos.dll pour .NET 2,3,3.5, et clr.dll pour .NET 4), mais il ya beaucoup de tutoriels en ligne comment le faire. Par ailleurs, je voudrais vous recommandons d'ajouter des gestionnaires d'exception dans votre application de sorte que vous obtenez un joli fichier journal lorsque votre application arrête de manière inattendue.
Si la sortie n'a pas conduit à la droite de la pile vous shold utilisation
!ClrStack
et
!Fils
pour trouver les threads avoir des exceptions sur leur tapis.
Généralement ce que je fais, c'est mettre des fichiers journaux dans entre les processus, donc je sais que le flux de mon programme.
Si c'est une application console, mettre de la Console.WriteLine(une chaîne de caractères) et puis vous pouvez mettre de la Console.ReadLine() à la fin de suspendre l'exécution de votre programme.
Suis tombé sur un problème similaire récemment. Le problème que j'ai eu, c'est sur windows 7, j'ai été en utilisant .ico (les fichiers d'icône). Mais il n'y a pas de support pour ces sur XP. Dans votre application, si vous utilisez l'icône de fichiers, essayez de les retirer.. voir si cela résout le issuse.
Démarrer en commentant les lignes de code et l'ensemble des classes/méthodes à partir de votre code jusqu'à ce que vous obtenez de travail (Ou de commencer par commenter tout). Puis lentement commencer à introduire des lignes de code et les appels de méthode etc. Jusqu'à ce qu'elle casse. Cela devrait vous donner une idée d'un code de la classe ou de référence qui est à l'origine du problème. Ce n'est certes une tâche fastidieuse de la méthode, mais en même temps, assez mécanique et dans une heure ou donc, vous devriez avoir une assez bonne idée du coupable.
J'ai entendu dire que certains ont déclaré les codes affectés sur l'exécution du fichier de sortie pour le comportement de quelque chose comme cela s'est produit pour votre application.(spécialement en rapport à 2010 pas d'autres version antérieure)
mais d'un autre côté,l'année dernière, je travaillais sur un programme que j'ai utilisé le Dev suite de Composants. comme vous le savez sa fissure juste de travailler dans .Net Framework 3.5 et mon programme de la plate-forme a été .Net Framework 4.même chose pour votre application, qui est arrivé bof mon application.j'ai eu à faire un downgrade de ma plate-forme à 3,5 et de son bon travail.peut-être que cette expérience personnelle vous aider à mec.
je veux dire quelque chose d'autre,ce que certaines erreurs ne sont pas dépendent de l'architecture du PROCESSEUR.Point s'en préoccuper.
bonne chance. Ali Foroughi
La "TryCathcWhen"liés à la ligne m'a fait penser à certains exception non gérée au démarrage, ou une exception est levée dans un bloc catch au démarrage.
Voir votre code de démarrage serait utile.
J'ai vu cela se produire sur les machines où l'installation de .NET 3.5/4 avait pas réussi/non réussi. Cependant, c'est également très peu probable.
Vous devriez essayer d'installer le débogage distant sur la machine (assez facile) et ensuite le réglage de la machine distante comme cible dans Visual Studio, exécutez le programme en mode debug. Le programme va alors lancer sur la machine distante et vous obtiendrez le message d'erreur dans Visual Studio.
J'ai eu un .Net 2.0 application qui a travaillé avec le débogage sur, Mais pas dans une version release(après l'installation).
Je n'étais pas tout enregistrement à partir de mon Application directement, mes Erreurs sont venus tout droit d' .NET. Le problème est que j'avais créé mon Propre Programme dans une classe static void main() à l'intérieur de la principale, j'ai eu un
try...catch..finally
bloc. Pour une raison quelconque .NET a été d'étouffement sur lesfinally
. Avez-vous quelque chose comme ça dans votre programme?C'est vraiment une erreur générique. Dans mon cas, fraîchement installé l'application n'a pas pu créer sa propre source de l'événement en raison de l'insuffisance des autorisations. Il est résolu (laide) par l'exécution de l'application une fois dans "admin" de mode. Assurez-vous que toutes les exceptions internes sont traitées. Des événements est également une bonne source d'information.
Dans mon cas, le problème a été résolu lorsque l'utilisateur a installé le même .Net FW version que j'ai été développement de. (I a FW 4.5.1 et l'utilisateur avait FW 4.0).
Donc, vérifiez la version FW:
http://msdn.microsoft.com/library/hh925568(v=vs. 110).aspx
Et installer exactement la même avant d'essayer à nouveau d'exécuter