VS 2017设计师:未找到方法

时间:2017-10-25 18:10:03

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

我有一个包含用户控件的Windows窗体(每个窗口都在不同的程序集中定义)。表单和用户控件都在BindingList<>上调用扩展方法。扩展方法在第3个程序集中定义。一切都编译和放大运行得很好。

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

  

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

     

找不到方法:' System.ComponentModel.BindingList 1 KamaTrenda.Utilities.Lists.ListUtilities.AddReset(System.ComponentModel.BindingList 1,   System.Collections.Generic.IEnumerable`1)&#39 ;.

调用堆栈:

  

在System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object   组件,对象值)at   Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(对象   组件,对象值)at   System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager   经理,CodeAssignStatement声明,   CodePropertyReferenceExpression propertyReferenceEx,Boolean   reportError)at   System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager   经理,CodeAssignStatement声明)at   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>();

和AddReset:

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的定义,它没有任何区别。

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

表单和控件的.​​resx文件都是指属性。

1 个答案:

答案 0 :(得分:0)

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

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

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