How to disable designer in derived classes in following generations

夙愿已清 提交于 2020-01-01 04:51:06

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!