我有一个包含用户控件的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文件都是指属性。
答案 0 :(得分:0)
表单的Designer.cs有一些似乎导致问题的代码:
this.control.PositionsToDisplay = ((System.Collections.Generic.IList<IPosition>)(resources.GetObject("control.PositionsToDisplay")));
删除它(大概是在添加DesignerSerializationVisibility.Hidden之后,以便它不会重新生成)似乎解决了这个问题。