Как отключить конструктор в производных классах в следующих поколениях - PullRequest
8 голосов
/ 24 января 2012

Чтобы отключить конструктор компонентов в классах, просто добавить в него только атрибут [System.ComponentModel.DesignerCategory ("")], однако он не работает ни для каких классов, производных от этого класса, в любом поколении.Например:

[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

Это происходит, конечно, в любых других поколениях и перестановках.Например,

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

Кто-нибудь когда-нибудь пытался от него избавиться?Почему компонентная модель пытается добавить поддержку дизайнера, даже если она явно отключена в первом поколении?

Спасибо

Ответы [ 2 ]

8 голосов
/ 25 января 2012

Причиной такого поведения являются кэшированные ссылочные сборки.Чтобы решить эту проблему, удалите ссылку на сборку, содержащую базовый сервер с атрибутом, и добавьте ее снова.В этом случае Visual Studio перестраивает проект и не определяет редактор по умолчанию для класса Derrived.

0 голосов
/ 26 сентября 2017

«Наследование атрибутов» поначалу показалось мне странным, так как я всегда думал, что атрибуты не наследуются; после проверки docs.microsoft.com я обнаружил, что это не обязательно так - атрибуты могут иметь Inherited = true, поэтому спасибо вам за помощь в расширении моих знаний: -)

Кроме того, мне также пришлось удалить группу <SubType>Component</SubType> записей из файла .csproj

...