收集被修改;枚举操作不能在vswinforms设计器中执行

本文关键字:vswinforms 执行 不能 修改 操作 枚举 | 更新日期: 2023-09-27 18:12:54

自从将我们公司内部的winforms应用程序从VS2008转换到VS2012项目以来,我在使用winforms设计器时遇到了问题。

有时设计器陷入错误状态,给出以下错误消息:

"Collection was modified;枚举操作可能无法执行",调用堆栈显示:

Instances of this error (1)  
1.   Hide Call Stack 
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblySpecFound(List`1 assemblies, String assemblyFullName)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AddDependencies(Assembly a, String fileName)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchByShortName(String partialName, String fullName, AssemblyEntry[] entries, Assembly& assembly)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchNormalEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, Boolean fastSearch)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchEntries(AssemblyName assemblyName, String typeName, Boolean ignoreCase, Assembly& assembly, ReferenceType refType)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.System.ComponentModel.Design.ITypeResolutionService.GetAssembly(AssemblyName name, Boolean throwOnError)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.System.ComponentModel.Design.ITypeResolutionService.GetAssembly(AssemblyName name)
at Microsoft.VisualStudio.Design.VSDynamicTypeService.OnAssemblyResolve(Object sender, ResolveEventArgs e)
at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)  

似乎设计人员正试图更改引用程序集的列表,可能是因为一些无效的程序集。在试图解决这个问题时,我发现在项目->属性->安全下更改"启用ClickOnce Security"选项可以使设计人员恢复工作。但是,如果选项被打开,我得到设计师的错误,关闭它,重建所有可以解决问题,从时间和反之亦然!!!!…所以我现在有点迷茫。

收集被修改;枚举操作不能在vswinforms设计器中执行

我也有同样的问题,这让我一整天都很抓狂。原因(当然除了Visual Studio本身的bug之外)是我的项目缺少一个程序集引用。确切地说,它引用了两个程序集A和B,其中A本身也引用了B -但与我使用的版本不同。我应该引用和A引用的相同版本的B

它归结为:我的程序集引用不太正确。它们是正确的,足以让代码编译和运行良好,但错误的足以让WinForms设计器崩溃。

为了找到问题,我启动了第二个VS实例,并将其调试器附加到加载了我的解决方案的第一个实例(Debug | Attach To Process)。然后在调试|异常中,我激活了对公共语言运行时异常的中断。现在,在我的第一个VS实例中,我双击表单打开它。

我连续得到多个异常,其中大多数与我的代码无关。但其中一个是fileloadexexception:"无法加载文件或程序集XXX,版本=3.7.0.25089,…"因此,我添加了对程序集的正确版本的引用。(说到正确,我指的是精确到最后一个数字——WinForms设计器在汇编版本方面非常迂腐。)然后,表格就像魔法一样打开了!

这似乎是一个通用的Visual Studio 2012 Bug。

这是我从微软收到的官方邮件

Microsoft Connect的问候!

这个通知是为反馈项目生成的:VS2012 WinForms Designer不再工作-错误:Collection被修改;不能执行枚举操作。你在microsoft Connect网站上提交的。

谢谢你的反馈。这个bug是这里报告的bug的副本:http://connect.microsoft.com/VisualStudio/feedback/details/781193/form-designer-error-collection-was-modified-enumeration-operation-may-not-executethere请监控该问题(781193)以获取进一步更新。没有可用的解决方案,但我们将在下一个版本的Visual Studio中修复此问题。