【问题标题】:VS 2017 Designer: Method not foundVS 2017 Designer:找不到方法
【发布时间】:2017-10-25 18:10:03
【问题描述】:

我有一个包含用户控件(每个都在单独的程序集中定义)的 Windows 窗体。窗体和用户控件都调用 BindingList 上的扩展方法。扩展方法在第三个程序集中定义。一切都编译并运行良好。

但是,如果我尝试在 Visual Studio 2017 设计器中打开表单,则会收到错误消息:

为防止在加载设计器之前可能丢失数据,必须解决以下错误:

找不到方法:'System.ComponentModel.BindingList1 KamaTrenda.Utilities.Lists.ListUtilities.AddReset(System.ComponentModel.BindingList1, System.Collections.Generic.IEnumerable`1)'。

调用栈:

在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object 组件,对象值)在 Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(对象 组件,对象值)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager 经理,CodeAssignStatement 语句, CodePropertyReferenceExpression propertyReferenceEx, Boolean 报告错误)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager 经理,CodeAssignStatement 语句)在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager 经理,CodeStatement 语句)

注释掉这个属性的setter的内容允许在设计器中打开表单:

public IList<IPosition> PositionsToDisplay
{
    get { return myPositionsToDisplay.Select(x => x.Position).ToList(); }
    set { myPositionsToDisplay.AddReset(value.Select(x => new PositionAdapter(x))); }
}

myPositionsToDisplay:

private readonly BindingList<PositionAdapter> myPositionsToDisplay = new SortableBindingList<PositionAdapter>();

然后添加重置:

public static class ListUtilities
{
        public static BindingList<T> AddReset<T>(this BindingList<T> list, IEnumerable<T> toAdd)
        {
            list.RaiseListChangedEvents = false;
            foreach (T item in toAdd)
                list.Add(item);
            list.RaiseListChangedEvents = true;
            list.ResetBindings();
            return list; // for chaining
        }
}

我已经尝试添加

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

对PositionsToDisplay的定义,没有区别。

我尝试重建,手动删除所有 3 个项目的内容 obj 和 bin 目录,以及 AppData\Local\Microsoft\VisualStudio\15.0_6d397e1a\ProjectAssemblies 的内容,关闭 VS 2017 中所有打开的文档,关闭解决方案,然后重新启动 Visual Studio,它没有任何区别。

无论是表单还是控件的.resx文件都没有引用属性。

【问题讨论】:

    标签: visual-studio-2017 windows-forms-designer


    【解决方案1】:

    表单的 Designer.cs 有一些似乎导致问题的代码:

    this.control.PositionsToDisplay = ((System.Collections.Generic.IList<IPosition>)(resources.GetObject("control.PositionsToDisplay")));
    

    删除这个(大概是在添加 DesignerSerializationVisibility.Hidden 之后,这样它就不会重新生成)似乎解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2018-07-24
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多