4 votes

Visual Studio se ferme en douceur lorsqu'il rencontre des erreurs XAML dans l'initialisation.

J'ai eu de sérieux problèmes avec Visual Studio 2010 ces derniers temps. Il se bloque d'une manière particulière lorsque je rencontre certains types d'erreurs XAML au cours de l'exécution du programme. InitializeComponent() d'une commande/fenêtre.

Le programme s'interrompt et Visual Studio se met en branle comme s'il capturait une exception (parce que c'est le cas), puis s'arrête à mi-chemin en affichant un surlignage brisé dans mon fichier XAML, sans aucun détail quant à ce que est erronée. Exemple :

alt text

Il n'y a pas de pop outs, ou de détails N'importe où sur ce qui ne va pas, seulement une pile d'appels qui pointe vers ma InitializeComponent() appeler.

Normalement, je devrais faire des essais et des erreurs pour résoudre ce problème et trouver où j'ai fait une erreur, mais le vrai problème n'est pas mon code. Visual Studio est rendu complètement inutile à ce stade. Il signale que mon application est toujours en mode "Running". Les boutons Stop/Break/Restart de la barre d'outils ou des menus ne font rien (ils sont grisés).

La fermeture de l'application n'arrête pas ce comportement, la fermeture de Visual Studio le coince dans une boucle massive où il me crie dessus en se plaignant que chaque fichier ouvert n'est pas dans le projet de débogage, puis répète ce processus lorsque j'ai épuisé tous les fichiers ouverts.

Je dois forcer la fermeture devenv.exe Lorsque cela se produit 3 ou 4 fois de suite, c'est une perte de temps considérable (mes projets sont généralement assez volumineux et le studio peut être assez lent à charger).

Au point

  1. Quelqu'un d'autre a-t-il connu ce problème ?
  2. Comment puis-je empêcher le studio de se verrouiller.
  3. Puis-je au MOINS obtenir des informations de cette bête d'une autre manière afin de pouvoir corriger mon erreur XAML plus tôt qu'après 3-4 compilations d'essai-erreur produisant le même plantage ?

Toute aide serait appréciée.

Version de Visual Studio 2010 : 10.0.30319.1RTM

Édition et mise à jour

Pour info, la plupart des erreurs qui causent ce problème sont les suivantes XamlParseExceptions (J'ai compris cela après avoir trouvé ce qui n'allait pas avec mon XAML).

Je pense que je dois être plus clair. Je ne cherche pas à trouver la solution à mon problème de code, car il s'agit généralement de fautes de frappe ou de petites choses, Je cherche une solution pour éviter que VStudio ne s'embrouille à cause de cela.

L'erreur particulière dans l'image ci-dessus qui, à 100%, a causé ce problème était une XamlParseException causé par l'oubli d'un Value sur un déclencheur de données.

J'ai corrigé cette partie mais cela ne m'explique toujours pas pourquoi mon studio devient un gros morceau de programme castré lorsqu'une exception parfaitement normale est levée lors de l'analyse du XAML.

Code qui causera ce problème (au moins pour moi)

Il s'agit du modèle de base de l'application WPF, avec les éléments suivants Window.xaml code. Le problème est un manque Value="True" sur le <DataTrigger ...> dans le modèle. Il génère un XamlParseException et Visual Studio se bloque comme décrit ci-dessus lors du débogage.

<Window x:Class="XamlParseExplosion.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
   <DataTemplate x:Key="BankListItemTemplate">
    <Border x:Name="ItemBorder" Width="250" Margin="1" BorderBrush="Blue" BorderThickness="5,0,0,0">
     <Grid>
      <Label Content="{Binding Name}" />
     </Grid>
    </Border>
    <DataTemplate.Triggers>
     <DataTrigger Binding="{Binding IsDirty}">
      <Setter TargetName="ItemBorder" Property="BorderBrush" Value="Red" />
     </DataTrigger>
    </DataTemplate.Triggers>
   </DataTemplate>
  </Window.Resources>
  <Grid>
   <ListView ItemTemplate="{StaticResource BankListItemTemplate}" />
  </Grid>
 </Window>

Notes finales

Les solutions suivantes n'a pas aidez-moi :

  1. Redémarrage de Visual Studio
  2. Redémarrage de
  3. Réinstallation de Visual Studio
  4. Désactiver les compléments comme ReSharper et Reflector

Mise à jour (bien plus tard) avec réponse

Je veux ajouter quelque chose (comme une pseudo-réponse) parce que j'ai trouvé plus d'informations à ce sujet plus tard et je veux les transmettre aux personnes qui trouvent cette question dans Google.

Le vrai problème : L'exception XamlParseException a été sélectionnée dans Debug -> Exceptions pour être interrompue lorsqu'elle se produit, parce que cela se produit pendant le câblage WPF et que vstudio ne peut pas l'attraper correctement (normalement, elle devrait descendre de quelques niveaux supplémentaires et être gérée là où vstudio pourrait la traiter).

Il suffit de l'éteindre et la vie sera à nouveau belle.

Je n'ai pas voulu mettre cela en tant que réponse parce que la réponse fournie par mazelo était correcte aussi, lorsque vstudio est exécuté en tant qu'administrateur, il semble être capable d'attraper l'exception correctement et de déboguer à partir de là, donc je ne voulais pas lui enlever le statut de réponse parce que sa solution fonctionne.

2voto

GMG Points 21

J'ai eu un problème similaire et les réponses ci-dessus n'ont pas fonctionné pour moi. Je vais poster ma solution ici au cas où cela arriverait à d'autres personnes. J'avais une fenêtre contenant un xaml suspect, qui, lorsque j'ai essayé d'ouvrir l'onglet de la fenêtre dans VS, a provoqué un crash à chaque fois. Génial quand vous voulez entrer dans la fenêtre pour supprimer le mauvais code ! Solution simple : Ouvrir le fichier xaml dans le bloc-notes, supprimer le mauvais code, puis le reconstruire dans VS. Simple, mais qui a fonctionné pour moi.

1voto

Kip9000 Points 4462

Il s'agit probablement d'un plantage lors de l'initialisation d'un UserControl intégré. Regardez comment les DependencyProperties de ce contrôle sont gérées.

1voto

mazelo Points 76

J'ai eu un problème similaire. Après plusieurs heures, j'ai eu l'idée de lancer Visual Studio en tant qu'administrateur. Cela a réglé le problème, mais je ne sais toujours pas pourquoi.

0voto

AMissico Points 12837

Des choses à essayer :

  • Désactivez l'"assistant d'exception" dans les options de débogage.
  • Désactivez "Visual Studio hosting process" dans les propriétés de débogage du projet.

Le comportement est-il différent si vous activez l'option "break on CLR exceptions" dans la boîte de dialogue Exceptions (Ctrl+Shift+E) et désactivez l'option "Enable Just My Code..." ?

0voto

Tomas Voracek Points 4300

Quelque chose de similaire m'est arrivé dans un fichier aspx, projet sur MOSS. Il y avait une seule ligne qui provoquait le crash de VS à chaque fois. J'ai compris que la seule solution était de supprimer la ligne et de ne l'ajouter que lorsque le fichier n'était pas ouvert dans VS.

Avez-vous vérifié le format du fichier, c'est-à-dire s'agit-il d'un fichier Unicode/Ansi/etc correct ? Vérifiez-le au niveau binaire.

Essayez d'ouvrir un nouveau projet WPF, passez le XAML (pas de codebehind) et voyez si cela plante toujours. Try-catch autour de Initialize n'aidera pas ?

Edit : J'ai essayé XAML que vous avez posté, aucune erreur. Même version de VS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X