2010-04-18 13 views
11

Estoy tratando de abrir un control de usuario en uno de nuestros proyectos. Fue creado, creo, en VS 2003, y el proyecto se convirtió a VS2008. Puedo ver bien el código, pero cuando intento cargar la vista de diseñador, VS deja de responder y tengo que cerrarlo con el administrador de tareas. Intenté dejarlo funcionando durante varios minutos, pero no hace nada. Ejecuté "devenv/log" pero no vi nada inusual en el registro. No puedo encontrar un mensaje de error específico en ninguna parte. ¿Alguna idea de cuál podría ser el problema? ¿Hay algún modo de edición ligero que pueda usar o algo así?El control del usuario siempre falla Visual Studio

La razón por la que necesito echar un vistazo a la representación visual de este control es decidir dónde insertar algunos componentes nuevos.

He intentado buscar en Google y buscar SO, pero o bien no sé qué buscar o no hay nada por ahí sobre esto. Cualquier ayuda es apreciada.

(Lo más extraño es que el control de usuario parece cargar bien en otro proyecto que referencias, pero VS se estrella en cuanto incluso tanto como hacer clic en él en ese proyecto.)

EDITAR

El control de usuario es un contenedor de un editor de HTML de terceros ... por lo que no es exactamente algo que acceda a una base de datos.

Acabo de intentar poner el control sobre un nuevo proyecto y se colgó tan pronto como lo arrastré al formulario.

+0

@Nick: ¿Puedes editar tu pregunta y decirnos más sobre tu control de usuario, qué hace? ¿Y eso hace referencia a cualquier fuente externa, por ejemplo, base de datos, archivos de registro, etc.? –

Respuesta

0

Intenta comentar las partes o incluso el constructor completo del control y ver si aparece. Tal vez es otra inicialización que también falla.

+0

Comentando todo en el constructor no evitó que se bloquee. ¡Gracias por la sugerencia, sin embargo! – NickAldwin

3

Los bloqueos como estos se suelen asociar a redes. Una base de datos tal vez. Debe tener cuidado con el código que se ejecuta dentro del UserControl en el momento del diseño. No solo el constructor, también el evento Load, los temporizadores, OnHandleCreated, OnResize, etcétera. La forma de evitar ejecutar ese código es probando la propiedad DesignMode, no haga nada peligroso cuando sea verdadero.

Su última alternativa es debug the code at design time con otra instancia de Visual Studio.

+0

+1 para la depuración con otra instancia de VS, que funciona para mí. –

+0

He intentado depurar con otra instancia de VS, ¡pero parece que no llega a mi código en absoluto! Si rompo todo, está en "espera" o dice que no se cargan símbolos para ningún marco de pila de llamadas ... – NickAldwin

0

Después de todo lo que has hecho, también intentaría cargar el control del usuario en un nuevo proyecto y ver si se carga correctamente; y si lo hace, entonces puede "decidir dónde insertar algunos componentes nuevos" ... ¡solo pensando en voz alta!

0

he tenido algunos problemas similares al crear mis propios controles de usuario en Visual Studio, pero han sido capaces de conseguir que el usuario controla para mostrar correctamente siguiendo estos pasos:

  1. construir o reconstruir el proyecto/
  2. solución
  3. Cierre Visual Studio y volver a abrirlo

Estas son cosas muy básicas que apuesto a que ya se ha tratado. Solo tirarlo ahí afuera.

8

el control de usuario puede tener una propiedad como esta escrito:

private int myPropName; // note the lowercase m 
public int MyPropName { get { return MyPropName; } } // the property is returned 
                // instead of the variable 

Tenga en cuenta que el valor devuelto por get es la propiedad en sí.Esto bloquea VStudio 2008 cuando intenta ver las propiedades del control, lo que también ocurre al agregar el control (mediante arrastrar o soltar) a un Formulario.

Como señala NickAldwin, esto no genera advertencia o error en el compilador.

+0

Pero esto también debería causar errores/advertencias del compilador, que no obtengo. – NickAldwin

+0

¡No, no hay advertencia/error del compilador! – Gabriel

+0

Bingo. Tuve esto y arrojó un StackOverflow, pero obviamente solo cuando se llamó al getter. Al solucionar esto, se solucionó el bloqueo de mi diseñador. Es una lástima que no haya encontrado esto antes de la desinstalación ... vuelva a instalar por un día o 2. DERP. –

1

Tuve el mismo problema. En mi caso, el problema fue (creo) que estaba inicializando una matriz miembro en la declaración en lugar de en el constructor. El error fue que el proyecto de VisualStudio para mi aplicación se bloqueó de inmediato cuando traté de usar el control personalizado de mi lib que tenía la declaración "incorrecta".

Fue frustrante porque compilé mi componente personalizado sin errores.

Brooke

código que se estrelló:

class MyCustomObject: UserControl 
{ 
    private List<int> myList = new <int>List(); 
    public MyCustomObject(){ 
     InitializeComponent(); 
    } 

// other code here 
} 

solución

class MyCustomObject: UserControl 
{ 
    private List<int> myList; 
    public MyCustomObject(){ 
     InitializeComponent(); 
     myList= = new <int>List(); 
    } 

// other code here 
} 
13

I resuelto mi diseñador estrellarse utilizando las técnicas descritas aquí:

Good Way to Debug Visual Studio Designer Errors

He podido depurar algunos problemas del diseñador de control ejecutando una segunda instancia de VS, luego de su primera instancia de VS hago una "Depuración -> Adjuntar al proceso" y elijo "devenv".

Y

parece que el método Load() de UserControls alguna manera se analiza por el diseñador. Poner inicializaciones y demás código sospechoso en un caso - bucle - la comprobación de IsDesignMode mantiene el diseñador de la lectura de código que estrellarlo ....

--update: mirando hacia atrás ahora, todas las cosas la mayoría de resolverse cuando overthought/refactorizado el diseño de la aplicación.

+0

Salvavidas !!!!! ¡¡Me he estado tirando de los pelos con este problema !! Gracias @wornd :) –

+0

Segundo chico que recomienda este "adjuntar al proceso" - algo. PERO mi aplicación se cuelga cuando agrego el userControl. Así que no puedo depurar porque "adjuntar al proceso" también está comenzando el doblaje. En este caso, nada sucederá si no he colocado el userControl .... – C4u

+0

C4ud3x no puede seguir lo que quiere decir con "sí mismo";) ejecuta una segunda instancia de VS y luego se conecta al proceso dev.env, luego inserta el usuario control en la primera instancia de VS -> entonces ambos VS mueren? – womd

2

Para dar seguimiento a la publicación de la matriz, encontré el siguiente código para ayudar y evitar que VS se bloquee y lea la función onLoad.

No puedo responder y no quiero agregar un nuevo comentario. Puede usar lo siguiente en el método Load e impedir que VS lo lea y se bloquee. Esto fue tomado de this article

bool isDesignMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName.IndexOf("devenv") != -1); 
      if (isDesignMode) 
       return; 
+0

Esto es un salvavidas. He estado buscando esto por un par de días sin resultados :( – Kurotsuki

0

Recientemente tuve el error molesto después de la creación de control de usuario y unido para formar a través de diseñador, Visual Studio 2010 siempre se estrellaría cada vez que el modo de diseño de la misma forma en que se une el control del usuario.

Después de crear tantas veces y mucha experimentación i resuelto mi problema:

1 - Agregar nuevo archivo class.cs para proyectar 2 - Mover todas las clases de apoyo adicionales que había añadido a sí mismo el control del usuario 3 - Creo que esto es más importante: mover todos los delegados personalizados que conectan los eventos en User_Control al archivo recién agregado. 4 - Evento User_Control.Load eliminado.

Espero que esto pueda ayudar a alguien.

Saludos

1

Para me ayuda el cambio de marco de destino de ".Net Framework 4 Client Profile" a" .Net Framework 4" en la configuración del proyecto.

0

Me he encontrado con este problema también. Tengo un proyecto (ProjA) que contiene controles de usuario y otro proyecto (ProjB) que hace referencia a esos controles de usuario. Descubrí que cada vez que intento agregar un usuario en particular, el entorno vb.net se apaga y vuelve a cargar mi solución. Sin embargo, si comento hacia fuera el código que está contenida dentro de mi evento controles de carga

Private Sub SampleDisplayBox_Load(sender As Object, e As EventArgs) Handles Me.Load 
     'AddHandler Sample.Sample_Reloaded, AddressOf reload 
     'AddHandler Sample.Sample_Cleared, AddressOf SampleCleared 
     'AddHandler My.Settings.SettingsSaving, AddressOf UpdateColors 
     'UpdateColors() 
     'reload() 

    End Sub 

y luego reconstruir mi solución, me encuentro con problemas al agregar este control a un formulario. Es muy extraño que este problema ocurra en un solo control cuando tengo otros 7 controles en el mismo proyecto que funcionan todos de la misma manera sin errores.

Personalmente, creo que VB.NET me odia.

+0

No importa. Ahora está fallando con el código comentado también. ¿Dónde me equivoqué? – TMG

+0

Clavado en el mío de todos modos. – TMG

+0

Mi control de usuario hace referencia a un cierta clase como una propiedad. Vamos a llamarlo "Persona". Así que mi clase (Persona) podría tener una propiedad (Relativa COMO Nueva Persona) <<< ahí está el problema. Solucioné mi error reemplazando a la Persona AS relativa - con - Persona Relativa AS = NADA. De esta manera, la Propiedad "Relativa" solo se usa cuando es necesaria. – TMG

Cuestiones relacionadas