2010-09-16 11 views
1

J'ai un contrôle qui se bloque sur le concepteur de formulaire lorsque je compile l'application, et j'essaie de comprendre comment déboguer le problème.Crash de contrôle de débogage dans Visual Studio Designer

Je pensais que tout ce que je devais faire pour entrer dans un débogueur était de démarrer une deuxième copie de VS et utiliser Debug-Attach pour traiter et attacher à la copie de Visual Studio que la solution avec mon contrôle gênant . est en je l'ai fait, mais rien ne se passe lorsque les accidents de contrôle et je sais que je fais quelque chose de mal ...

l'accident se produit dans le concepteur et retourne le messagebox:

--------------------------- 
Microsoft Visual Studio 
--------------------------- 
The control NameSpace.MyControl has thrown an unhandled exception in the designer and has been disabled. 



Exception: 

Could not load file or assembly 'OtherProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 



Stack trace: 

    at NameSpace.MyControl.OnPaint(PaintEventArgs e) 
--------------------------- 
OK 
--------------------------- 

OtherProject est partie de la solution et est référencé par le projet avec à la fois le formulaire et le contrôle personnalisé. Lorsque je rejette la boîte de message, le contrôle affiche une pile sur laquelle le contrôle est sur mon formulaire, mais comme il n'inclut pas les numéros de ligne, je ne sais pas d'où vient le problème.

+0

Qu'est-ce que signifie l'accident? Est-ce que tout le Visual Studio disparaît simplement sans aucun message d'erreur? Ou voyez-vous un message d'erreur lorsque vous essayez d'ouvrir le formulaire? Cela se produit lorsque le concepteur ne peut pas instancier un contrôle et généralement vous obtenez des informations très utiles dans le message d'erreur. S'il y a un message, veuillez le poster ici. –

+0

Est-ce que 'OtherProject' est un projet dans votre solution? Est-ce qu'il compile? –

+0

@ 0xA3 Oui aux deux. –

Répondre

4

Le chemin de recherche pour les assemblys est différent lorsqu'ils sont chargés au moment de la conception, il s'agit du chemin de vérification pour Visual Studio. Ce qui est configuré par le fichier devenv.exe.config dans Common7 \ IDE. Seuls les dossiers Assemblées publiques et Assemblées privées sont inclus. Le répertoire de construction de votre projet est et non considéré.

La modification de ce fichier .config ou la copie de votre assemblage dans l'un de ces dossiers n'est pas très pratique. De loin, la meilleure chose à faire est de ne pas appeler le code qui nécessite cet assemblage au moment du design. Utilisez la propriété DesignMode:

protected override void OnPaint(PaintEventArgs e) { 
     if (!this.DesignMode) { 
      // Runtime painting code here 
      //... 
     } 
     base.OnPaint(e); 
    } 
+0

J'essaie de trouver d'où vient l'accident afin que je puisse supprimer uniquement le bit de code incriminé et ne pas avoir des contrôles complètement vides dans le concepteur. Une partie de mon problème est que le projet a été lancé par quelqu'un d'autre et que les contrôles interagissent entre eux d'une manière que je n'attends pas. Dans ce cas, l'incident se produit dans controlA, mais seulement si ControlB est sur le formulaire. –

+0

Je ne peux évidemment pas vous aider à trouver cela pour vous, pas sûr de ce que vous attendiez de moi. La propriété DesignMode est la clé. –

+0

C'est pourquoi je demandais comment attacher un débogueur. Je veux obtenir la ligne sur laquelle il se bloque et regarder ce qui a été appelé dans les contrôles pour le déclencher. Le bit de la pile affiché dans le concepteur n'a pas de numéro de ligne ou affiche autre chose que les méthodes du framework qui conduisent à l'appel OnPaint, ce qui ne m'aide pas à réduire le problème. –