2012-01-24 14 views
8

Per disabilitare il designer di componenti nelle classi è semplice aggiungere solo [Attributo System.ComponentModel.DesignerCategory ("")], tuttavia non funziona per nessuna classe derivato da questa classe in qualsiasi generazione. E.g:Come disabilitare il designer nelle classi derivate nelle generazioni successive

[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 

Questo succede, naturalmente, in qualsiasi altra generazione e permutazione. Per esempio.

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

Qualcuno ha mai provato a liberarsene? Perché il modello di componente tenta di aggiungere il supporto del designer anche se è disabilitato in modo esplicito nella prima generazione?

Grazie

assembly referenziati
+0

Non è chiaro esattamente in quali assembly queste classi vivono e se fanno parte o meno della soluzione. La casella degli strumenti 'Impostazioni AutoPopola ha la precedenza. –

+0

questo non è menzione. o f base e classi derivate nello stesso assembly o sono in un altro assembly il comportamento è lo stesso (solo la classe base [una direttamente derivata da ServiceBase] non ha alcun designer su di essa) – Tamir

risposta

7

La ragione di tale comportamento viene memorizzato nella cache. Per risolverlo, rimuovere il riferimento all'assembly contenente il server di base con attributo e aggiungerlo di nuovo. In questo caso, il progetto di ricostruzione di Visual Studio non definirà l'editor predefinito per la classe derrived.

+2

Ho avuto lo stesso problema e questo ha funzionato per me. La mia classe base è stata derivata da 'System.ComponentModel.Component' e ho dovuto rimuovere il riferimento a' Sistema', e quindi aggiungerlo di nuovo. Tutte le classi derivate ora si aprono con l'editor di codice per impostazione predefinita. Grazie! – Ove

+0

quello era il trucco! Grazie! –

0

"L'ereditarietà dell'attributo" all'inizio mi sembrava strano, poiché ho sempre pensato che gli attributi non fossero ereditati; dopo aver verificato docs.microsoft.com ho scoperto che questo non deve essere il caso - gli attributi possono avere Inherited = true, quindi grazie a voi per avermi aiutato a ampliare la mia conoscenza :-)

Inoltre, ho anche dovuto rimuovere un po 'di <SubType>Component</SubType> voci dal file .csproj