7

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

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

“集合已修改;枚举操作可能无法执行。” 调用堆栈说:

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)  

似乎设计者正在尝试更改引用程序集的列表,可能是因为某些无效程序集。在尝试解决问题时,我发现更改 Project->Properties->Security 下的“Enable ClickOnce Security”选项可以让设计器重新开始工作。但是,如果打开该选项并且我得到设计师错误将其关闭并重建所有可以不时解决问题,VICE VERSA!!!!...这就是为什么我现在有点失落。

4

2 回答 2

4

我有同样的问题,这让我整天发疯。原因(当然除了 Visual Studio 错误本身)是我的项目缺少程序集引用。准确地说,它引用了两个程序集 A 和 B,其中 A 本身也引用了 B——但版本与我使用的版本不同。我应该引用与 A 引用的相同版本的 B。

归结为:我的程序集引用不太正确。它们对于代码编译和运行来说是正确的,但对于 WinForms 设计器来说却是错误的。

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

我连续遇到多个异常,其中大部分与我的代码无关。但其中之一是 FileLoadException 声明:“无法加载文件或程序集'XXX,版本 = 3.7.0.25089,......”所以我添加了对正确版本的程序集的引用。(正确地说,我的意思是精确到最后一位数字——WinForms 设计师在汇编版本方面非常迂腐。)接下来我知道,表单打开就像一个魅力!

于 2013-07-05T14:40:41.993 回答
1

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

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

来自 Microsoft Connect 的问候!

此通知是针对反馈项生成的:VS2012 WinForms Designer 不再工作 -错误:集合已修改;枚举操作可能无法执行。您在 Microsoft Connect 站点上提交了该操作。

感谢您的反馈意见。此错误与此处报告的错误重复: http ://connect.microsoft.com/VisualStudio/feedback/details/781193/form-designer-error-collection-was-modified-enumeration-operation-may-not-executethere 请监视该问题 (781193) 以获取进一步更新。没有可用的解决方法,但我们将在下一版本的 Visual Studio 中解决此问题。

于 2013-05-29T06:24:53.360 回答