问题
In order to disable component designer in classes it is simple to add just [System.ComponentModel.DesignerCategory("")] attribute to it, however it does not work for any classes derived from this class in any generation. E.g:
[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
This happens, of course, in any other generations and permutations. E.g.
//Whatever attribute here
public class C:B {} //Designer is enabled here
Does anybody ever tried to get rid of it? Why component model tries to add designer support even if it explicitely disabled in first generation?
Thank you
回答1:
The reason for such behaviour is cached referenced assemblies. To solve it, remove reference to the assembly contained base server with attribute and add it again. In this case Visual Studio rebuild project and will not define default editor to derrived class.
回答2:
"Attribute inheritance" at first struck me as odd, as I always thought that attributes weren't inherited; after checking docs.microsoft.com I discovered that that doesn't have to be the case - attributes may have Inherited = true
, so thanks to you for helping me broaden my knowledge :-)
Additionally, I also had to remove a bunch of <SubType>Component</SubType>
entries from the .csproj file
来源:https://stackoverflow.com/questions/8984683/how-to-disable-designer-in-derived-classes-in-following-generations