VS 2017 设计器:找不到方法

VS 2017 Designer: Method not found

我有一个 windows 表单,其中包含一个用户控件(每个控件都在单独的程序集中定义)。窗体和用户控件都调用 BindingList<> 上的扩展方法。扩展方法在第三个程序集中定义。一切编译和运行正常。

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

To prevent possible data loss before loading the designer, the following errors must be resolved:

Method not found: 'System.ComponentModel.BindingList1 KamaTrenda.Utilities.Lists.ListUtilities.AddReset(System.ComponentModel.BindingList1, System.Collections.Generic.IEnumerable`1)'.

调用堆栈:

at System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value) at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(Object component, Object value) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

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

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

我的显示位置:

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.0_6d397e1a\ProjectAssemblies 的内容,关闭 VS 2017 中所有打开的文档,关闭解决方案,并重新启动 Visual Studio,但没有任何区别。

既不是窗体也不是控件的.resx文件,参考属性.

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

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

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