2012-01-24 9 views
8

Para deshabilitar al diseñador de componentes en las clases, es sencillo agregar solo el atributo [System.ComponentModel.DesignerCategory ("")], sin embargo, no funciona para ninguna clase derivado de esta clase en cualquier generación. Por ejemplo:Cómo deshabilitar el diseñador en las clases derivadas en las generaciones siguientes

[System.ComponentModel.DesignerCategory("")] 
public class A:ServiceBase { } //Designer is disabled here 

public class B:A {} //Designer is enabled here 

[System.ComponentModel.DesignerCategory("")] 
public class B:A {} //Designer is enabled here too 

[System.ComponentModel.DesignerCategory("Code")] 
public class B:A {} //Designer is enabled even here 

Esto sucede, por supuesto, en cualquier otra generación y permutaciones. P.ej.

//Whatever attribute here 
public class C:B {} //Designer is enabled here 

¿Alguna vez alguien trató de deshacerse de él? ¿Por qué el modelo de componentes intenta agregar soporte de diseñador incluso si se desactiva explícitamente en la primera generación?

Gracias

ensamblados de referencia
+0

No está muy claro exactamente en qué ensambles viven estas clases y si son o no parte de la solución. La caja de herramientas 'AutoPopulate configuración tiene prioridad. –

+0

esto no se menciona. ya sea base y clases derivadas en el mismo ensamblado o están en ensambles diferentes el comportamiento es el mismo (solo la clase base [una derivada directamente de ServiceBase] no tiene diseñador) – Tamir

Respuesta

7

La razón de tal comportamiento se almacena en caché. Para resolverlo, elimine la referencia al servidor base que contiene el ensamblado con atributo y agréguelo nuevamente. En este caso, el proyecto de reconstrucción de Visual Studio no definirá el editor predeterminado para la clase derivada.

+2

Tuve el mismo problema, y ​​esto funcionó para mí. Mi clase base se derivó de 'System.ComponentModel.Component' y tuve que eliminar la referencia a' System', y luego agregarlo de nuevo. Todas las clases derivadas ahora se abren con el editor de código de forma predeterminada. ¡Gracias! – Ove

+0

ese fue el truco! ¡Gracias! –

0

"Herencia de atributos" al principio me pareció raro, ya que siempre pensé que los atributos no se heredaban; después de comprobar docs.microsoft.com descubrí que eso no tiene por qué ser el caso - atributos pueden tener Inherited = true, así que gracias a ustedes por ayudarme a ampliar mis conocimientos :-)

Además, también tenía que eliminar un montón de <SubType>Component</SubType> entradas del archivo .csproj

Cuestiones relacionadas