2013-05-10 16 views
7

Seit der Konvertierung unserer Firma inhouse Winforms-Anwendung von einem VS2008 zu VS2012-Projekt habe ich Probleme mit dem Winforms-Designer.Sammlung wurde geändert; Enumeration Operation möglicherweise nicht ausgeführt in VS WinForms Designer

Manchmal fällt der Designer in einen Fehlerzustand wird folgende Fehlermeldung geben:

„Collection modifiziert wurde; Enumerationsvorgang nicht ausgeführt werden kann.“ mit dem Call-Stack Spruch:

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) 

Es scheint, dass der Designer, weil einige ungültigen Baugruppen die Liste der referenzierten Assemblys zu ändern vielleicht versucht. Beim Versuch, das Problem zu lösen, habe ich herausgefunden, dass das Ändern der Option "ClickOnce-Sicherheit aktivieren" unter Projekt-> Eigenschaften-> Sicherheit den Designer wieder an die Arbeit bringen kann. ABER wenn die Option eingeschaltet ist und ich den Designerfehler bekomme, der es abstellt und alles neu baut, kann das Problem von Zeit zu Zeit und VICE VERSA lösen !!!! ... Deshalb bin ich jetzt ein wenig verloren.

+0

Vielleicht sollten Sie versuchen, zuerst auf 2010 zu aktualisieren. :/ –

+0

Die Sammlung wurde modifiziert * bevor * die Ausnahme ausgelöst wird. Der Callstack hilft dir also überhaupt nicht. Es ist völlig unklar, wie Ihr Formular aussehen könnte, um diese Ausnahme zu verursachen. –

Antwort

1

Es scheint eine allgemeine Visual Studio 2012 Bug zu sein.

Hier ist die offizielle Mail ich von Microsoft bekam

Greetings from Microsoft Connect!

This notification was generated for feedback item: VS2012 WinForms Designer doesn't work anymore -Error: Collection was modified; enumeration operation may not execute.which you submitted at theMicrosoft Connect site.

Thank you for your feedback. This bug is a duplicate of the one reported here: http://connect.microsoft.com/VisualStudio/feedback/details/781193/form-designer-error-collection-was-modified-enumeration-operation-may-not-executethere Please monitor that issue (781193) for further updates. There are no workarounds available, but we are fixing this issue in the next release of Visual Studio.

+0

Ich habe gerade VS2012 Update 3 installiert. Das Problem besteht immer noch. Scheint so, als wäre die "nächste Version" mit dem Fix VS2013. –

4

ich hatte das gleiche Problem, was mich trieb den ganzen Tag verrückt. Die Ursache (abgesehen natürlich vom Visual Studio-Fehler selbst) war, dass meinem Projekt eine Assembly-Referenz fehlte. Um genau zu sein, referenzierte er zwei Assemblies A und B, wobei A selbst auch B referenzierte - aber in einer anderen Version als die, die ich verwendete. Ich hätte auf dieselbe Version von B verweisen sollen, auf die A verwiesen hat.

Worauf es ankommt ist: Meine Assembly Referenzen waren nicht ganz richtig. Sie waren richtig genug für den Code zu kompilieren und gut zu laufen, aber falsch genug für den WinForms-Designer zum Absturz.

Um das Problem zu finden, habe ich eine zweite VS-Instanz gestartet und seinen Debugger an den ersten angehängt, der meine Lösung geladen hat (Debug | Attach to Process). Dann in Debug | Ausnahmen, ich habe Breaking unter den Common Language Runtime Exceptions aktiviert. Jetzt habe ich in meiner ersten VS-Instanz auf das Formular doppelgeklickt, um es zu öffnen.

Ich habe mehrere Ausnahmen in Folge, von denen die meisten nichts mit meinem Code zu tun hatten. Aber einer von ihnen war eine FileLoadException, die besagt: "Datei oder Assembly konnte nicht geladen werden XXX, Version = 3.7.0.25089, ..." Also fügte ich einen Verweis auf die korrekte Version der Assembly hinzu. (Und mit richtig, ich meine bis zur letzten Ziffer - der WinForms-Designer ist furchtbar pedantisch, wenn es um Assembly-Versionen geht.) Und das Nächste, was ich weiß, öffnet sich wie ein Zauber!

+0

Das klingt nach einem guten Workaround für mich. Als wir unser Projekt von VS2008 auf VS2012 umgestellt haben, haben wir auch aus unseren kleineren Projekten kleine Dateien gemacht, die in einer Versionshölle enden. Ich werde versuchen, was Sie vorgeschlagen haben und nach falschen Versionsnummern in unseren referenzierten DLLs suchen – LazyGeek

Verwandte Themen