Faire en sorte que le concepteur Visual Studio ignore une propriété publique

J’ai un UserControl avec une propriété publique utilisant les atsortingbuts suivants:

[Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

J’ai essayé de supprimer le formulaire propriétaire, de recréer un nouveau formulaire dans Visual Studio 2010 et d’append ce UserControl au formulaire. Il continue d’append une ligne comme celle-ci dans le fichier Designer:

 this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty"))); 

Cela bloque mon application car cette propriété n’est pas conçue pour être créée par la sérialisation.

Rendre la propriété en lecture seule au moment de la conception empêchera son sérialisation dans le fichier resx. Bizarrement, si MyType est une collection, le concepteur ignore la lecture seule et vous pouvez toujours définir la propriété au moment du design, même si la propriété n’est pas écrite dans la résolution, il est donc préférable de ne pas la parcourir.

 [ReadOnly(true)] [Browsable(false)] public MyType MyProperty { get { return _MyProperty; } set { _MyProperty = value; } } 

Utilisez [DesignerSerializationVisibilityAtsortingbute ( Visibility = Hidden )]

Article MSDN

Essayez d’utiliser un champ privé avec les méthodes d’accesseur de la propriété avec l’atsortingbut [field: NonSerialized]:

 [field: NonSerialized] private MyType _MyProperty; [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public MyType MyProperty { get { return _MyProperty; } set { _MyProperty = value; } } 

Je n’ai pas réussi à trouver une solution réelle, mais une solution de contournement à la place …

Je devais aller dans le fichier Form.resx et localiser la paire clé / donnée qu’il désérialisait dans ma propriété publique. J’ai supprimé manuellement le contenu de la paire XML, puis j’ai pu exécuter l’application.

Cela a permis à mon application de se construire et de s’exécuter sans erreur. Tout ce que j’ai essayé (y compris la suppression du formulaire de conteneur pour mon UserControl et sa recréation répétée) ne fonctionnait pas.