c# - referencia - El diseñador no se pudo mostrar para este archivo porque ninguna de las clases que contiene puede diseñarse
no se pudo cargar el elemento del cuadro de herramientas (5)
Tenemos el siguiente componente compartido:
public class OurServiceBase : System.ServiceProcess.ServiceBase
Esta clase tiene la funcionalidad que queremos en todos nuestros servicios posteriores, como la programación de ejecución estandarizada y la funcionalidad de registro.
En un nuevo proyecto, agrego lo siguiente:
public class MyService : System.ServiceProcess.ServiceBase
En el Diseñador de Windows, la clase se muestra correctamente.
Cuando cambio el servicio para derivar de OurServiceBase
public class MyService : OurSharedLibrary.OurServiceBase
El diseñador deja de trabajar:
El error completo es: No se pudo mostrar el diseñador para este archivo porque no se puede diseñar ninguna de las clases que contiene. El diseñador inspeccionó las siguientes clases en el archivo: EmailProcessor --- La clase base ''OurSharedLibrary.CienaServiceBase'' no se pudo cargar. Asegúrese de que se haya hecho referencia al ensamblaje y que se hayan construido todos los proyectos.
Se hace referencia a los ensamblajes adecuados, se construye el proyecto. No entiendo por qué el diseñador se está volcando en esto, ya que mi servicio en última instancia se deriva de una clase designable.
Cualquier sugerencia sería muy bienvenida.
Un poco más de información: la pila de llamadas del diseñador cuando presenta el error de no poder diseñar el servicio derivado:
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
19/07/2011 14:34 EDT Nuevo descubrimiento.
La clase "OurServiceBase" existe en un proyecto separado (usualmente referenciado solo como DLL). Por un capricho, copié el archivo de clase base en mi proyecto, construí y abrí el diseñador. ¡Funcionó! Cuando volví a eliminar el archivo de clase base y volví a la referencia de DLL externa, el diseñador se rompió nuevamente.
En caso de que alguien como yo tenga que trabajar en un proyecto antiguo en Visual Studio 2008 y enfrentarse al mismo problema.
Probablemente es porque la ruta del proyecto contiene algunos caracteres exóticos como C#
Ejemplo, mi camino se ve así:
C: / projects / C # / projectname ...
Cuando se le cambia el nombre a
C: / projects / CSharp / projectname ...
Visual Studio ahora puede reconocer la clase principal y luego abrir el formulario con el formulario heredado.
Lo mejor sería comenzar con una versión de OurServiceBase
sin funcionalidad y ver si puede diseñar MyService
. Si es así, agregue lentamente la funcionalidad hasta que se rompa.
Dado que parece que Visual Studio está teniendo problemas para serializar uno de los miembros de OurServiceBase
.
También puede encontrarse con este problema si su control / servicio está heredando de una clase genérica. El diseñador no se lleva bien con las clases abstractas en la jerarquía, ya que tiene que instanciarlas.
También puedes intentar hacer esto:
- Cerrar todas las páginas de diseño de la interfaz de usuario
- Solución limpia
- Construir solución
- Abra las páginas de diseño de interfaz de usuario deseadas
Esto podría o no podría ayudar, pero ciertamente resolvió el mismo problema en mi proyecto.
Tenía una solución con 2 proyectos (uno que hacía referencia al otro) y acababa de establecer uno para apuntar a .Net 4.5.2 y el otro era apuntar a 4.5.
Consejo: vea los mensajes de advertencia en la Lista de errores:
Hubo una discrepancia entre la arquitectura del procesador del proyecto que se está construyendo "MSIL" y la arquitectura del procesador de la referencia "C: .... dll", "x86". Este desajuste puede causar fallos en el tiempo de ejecución. Considere cambiar la arquitectura de procesador objetivo de su proyecto a través del Administrador de configuración para alinear las arquitecturas de procesador entre su proyecto y las referencias, o tome una dependencia de las referencias con una arquitectura de procesador que coincida con la arquitectura de procesador objetivo de su proyecto.