使Visual Studio设计器忽略公共属性

我有一个带有公共属性的UserControl,使用以下属性:

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

我尝试删除所有者表单,在Visual Studio 2010中重新创建一个新表单,并将此UserControl添加到表单。 它不断在Designer文件中添加如下行:

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

这会导致我的应用程序崩溃,因为此属性不是由序列化创建的。

仅在设计时读取属性将阻止它被序列化到resx文件中。 奇怪的是,如果MyType碰巧是一个集合,设计者会忽略只读,你仍然可以在设计时设置属性,即使该属性没有写入resx,所以最好使该属性也不可浏览。

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

使用[DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]

MSDN文章

尝试使用具有属性的访问器方法的私有字段以及[field:NonSerialized]属性:

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

我没有找到真正的解决方案,而是一种解决方法……

我不得不进入Form.resx文件并找到它反序列化到我的公共属性中的数据/值键对。 我手动删除了XML对内容,然后我就能运行该应用程序了。

这使我的应用程序可以无错误地构建和运行。 我尝试的其他所有内容(包括删除UserControl的容器表单并重复创建它)都不起作用。