2010-09-01 31 views
12

C#, VS2010, la aplicación WinForm:VS 2010 - Error al abrir Control de Usuario/Formulario con el diseñador

A veces tengo el problema de que me sale un mensaje de error al abrir algunos de mis controles/formas. Todo el código se compila y la aplicación se ejecuta correctamente. Abrir el control en el diseñador me da:

El cargador de diseño no proporcionó un componente raíz, pero no ha indicado por qué.

Según mi experiencia, puedo decir que, por lo general, hay algo en mi código que no se inicializa correctamente, p. Ej. no se establece una propiedad que de alguna manera está disponible en tiempo de ejecución, pero no cuando se abre con el diseñador. El único problema es que la causa raíz es difícil de encontrar.

P: ¿Existe la posibilidad de utilizar de alguna manera el depurador cuando el diseñador abre mi componente en Visual Studio 2010? Eso ayudaría mucho y el problema que se enfrenta es probablemente una cuestión de minutos.

Observación: Para que quede claro, sé cómo usar el depurador ;-), no tengo idea de cómo podría decirle al diseñador de VS2010 que abra mi control en el modo de depuración.

A partir del 2-SEP-2010 Añadido:

Gracias por su ayuda. Básicamente es el artículo de MSDN Library que describe cómo hacerlo.

  • he conseguido configurarlo y ejecutar la segunda instancia (no había mucho para entender cómo hacerlo).
  • Solo falla en mi caso, porque la segunda instancia de VS2010 (Depuración de tiempo de diseño) no puede encontrar los símbolos para mi control personalizado. He agregado los símbolos manualmente en Depuración/símbolos. Sin resultado de ello, sigue siendo "punto de interrupción no se alcanzó debido a los símbolos perdidos"

Por cierto, el uso de este enfoque es útil para excluir algunas cosas desde el símbolo de carga (a través de la ventana módulos), ya que este seguro será una mucho tiempo.

Ahora bien, si tengo que encontrar la manera de obtener los símbolos resueltos y entonces puedo abordar el problema .....

+0

La depuración del tiempo de diseño con la segunda instancia de VS2010 funciona, todavía tengo un problema con los símbolos de mis dlls. He publicado esto aquí (http://stackoverflow.com/questions/3687840/vs2010-loading-symbols-to-debug-at-design-time-breakpoint-will-not-be-hit) y publicaré la solución también aquí una vez que lo sé. –

Respuesta

13

La gran mayoría de los problemas de tiempo de diseño con controles personalizados son causados ​​por código en los controladores de eventos o anulaciones de método en su control ejecutándose en tiempo de diseño así como en tiempo de ejecución. Normalmente es deseable, obtienes un feedback instantáneo cuando cambias una propiedad en la ventana Propiedades, por ejemplo.

Pero no es deseable cuando el código depende de algo que está disponible en tiempo de ejecución pero no de tiempo de diseño. Como una conexión dbase o un archivo que está almacenado en la carpeta de compilación. Eso puede generar excepciones y Visual Studio no es muy robusto contra el manejo de excepciones en tiempo de diseño. En el peor de los casos, puede bloquear VS en el escritorio sin ningún diagnóstico. Pero todo es posible.

revisar el código en su control y asegúrese de que los bits de código que debe única de ejecución en tiempo de ejecución están envueltos de esta manera:

if (!DesignMode) { 
    // etc.. 
} 

Los casos difíciles se pueden diagnosticar con las sugerencias de depuración en este MSDN Library article .

+0

Gracias por los comentarios Hans. Primero tengo que encontrar la causa raíz antes de poder aprovechar la condición "DesignMode". Sin embargo, el artículo de MSDN describe cómo hacerlo, solo tiene que descubrir el problema del símbolo (como se describe en la publicación original) –

+0

Definitivamente * lo haré al revés. –

+0

Resuelve la mayoría de los casos, algunos permanecen. –

12

para depurar el control en el modo de diseño, se necesitan dos instancias de Visual Studio. En la primera instancia, abra el proyecto que contiene este código fuente de control. En Project Properties, Debugger, configure la línea de comando que llama a otra instancia de Visual Studio (msdev? No sabe exactamente para VS2010 - tómelo desde el acceso directo), luego ejecute el comando "Iniciar depuración". Se inicia otra instancia de Visual Studio. En este ejemplo, abra el proyecto del cliente que usa su control en el formulario.

+0

Gracias Alex, este es el enfoque correcto. El artículo de MSDN en la respuesta de Hans describe cómo hacerlo exactamente. Pero tu respuesta también es correcta. Observación: Mi reputación aquí aún no es lo suficientemente alta como para votar por su respuesta. –

Cuestiones relacionadas