我目前在 VS12 和内置设计器中遇到问题。我正在使用一个自定义控件框架,它基本上扩展了基本的用户控件和 DevExpress 控件。有一段时间,当我尝试更改属性或移动其中一个控件时,我在设计模式下保存表单时遇到问题。我试图尽可能好地翻译错误消息(我使用的是德语版的 VS)。
Visual Studio Designer Error Message:
Error during code generation for the MyPropertyMap-property. Error: The property accessor for the MyPropertyMap for the settings object has caused an exception: The enumeration has changed. Enumeration could not be executed.
我尝试使用另一个启用了 CLR 调试的 Visual Studio 实例来调试设计器异常:
System-InvalidOperationException
The enumeration has changed. Enumeration could not be executed.
Source: CustomForm
StackTrace: MyNamespace.Controls.CustomForm.get_FormVariables()
TargetSite: System.Collections.Hashtable get_FormVariables()
看起来设计师试图访问表单上的属性,尽管我试图使用以下代码向设计师隐藏它:
[NonSerialized]
private Hashtable formVariables = null;
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
public Hashtable FormVariables
{
get
{
...
我尝试添加 NonSerialized 字段,因为我认为属性的序列化可能会导致问题。getter 基本上查询表单面板上的所有控件并将它们添加到哈希表中,因为我正在使用它们做一些基于计时器的东西。但是在设计期间,设计者没有必要访问这个属性。有什么建议我可以真正向设计师隐藏它并防止此错误吗?
如果我错过了任何其他重要的输入,请告诉我。
编辑:
我仍在尝试找出导致问题的原因。我发现的一件事是,当我在 Visual Studio 设计器设置中禁用优化代码生成设置时,错误总是发生。当我重新启用它时,第一次尝试保存表单时会发生一次错误 - 而不会在第二次尝试时发生 - 这意味着表单已保存。我现在不确定它是否一直都这样——但至少在我尝试过的那几次中是这样。
如果现在在 DesignMode 中,所有使用枚举或其他集合对象的公共属性都被实现为返回 null。当设计者尝试访问 getter 函数时,仍然会发生异常。
亲切的问候。