2013-05-10 17 views
7

Od czasu konwersji aplikacji WinForm w firmie z projektu VS2008 na VS2012, mam problemy z używaniem projektanta WinForm.Kolekcja została zmodyfikowana; operacja wyliczania nie może być wykonana w programie WinForm Designer VS

Czasami projektant wpada w stanie błędu podając następujący komunikat o błędzie:

„Kolekcja została zmodyfikowana; operacja wyliczania nie może wykonać.” z powiedzeniem stosu wywołań:

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) 

Wydaje się, że projektant stara się zmienić listę odwołuje zespołów może dlatego niektórych nieprawidłowych zespołów. Podczas próby rozwiązania problemu doszedłem do wniosku, że zmiana opcji "Włącz zabezpieczenie ClickOnce" w obszarze Projekt-> Właściwości-> Zabezpieczenia może przywrócić działanie projektanta. ALE jeśli opcja jest włączona i dostaję błąd projektanta wyłączenie i odbudować wszystko może od czasu do czasu rozwiązać problem i VICE VERSA !!!! ... Właśnie dlatego jestem trochę zagubiony właśnie teraz.

+0

Może powinieneś najpierw spróbować uaktualnić do 2010 roku. :/ –

+0

Kolekcja została zmodyfikowana * przed * wyrzuceniem wyjątku. Tak więc, callstack w ogóle nie pomaga. Nie jest całkowicie jasne, jak może wyglądać twój formularz, aby spowodować ten wyjątek. –

Odpowiedz

1

Wygląda na generell Visual Studio 2012 Błąd.

Oto offical poczty dostałem od Microsoft

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

Właśnie zainstalowałem aktualizację VS2012 3. Problem nadal występuje. Wydaje się, że "następne wydanie" z poprawką będzie VS2013. –

4

miałem ten sam problem, co doprowadzało mnie do szału przez cały dzień. Przyczyną (oczywiście poza samym błędem Visual Studio) było to, że w moim projekcie brakowało odniesienia do zespołu. Mówiąc dokładniej, odwoływał się on do dwóch złożeń A i B, gdzie A również odnosi się do B - ale w innej wersji niż ta, której użyłem. Powinienem odwołać się do tej samej wersji B, do której odwołuje się A.

Co to jest sprowadza się do: Moje referencje montażowe nie były całkiem poprawne. Były wystarczająco dobre, aby kod mógł się skompilować i działał dobrze, ale na tyle, żeby projektant WinForm mógł się zawiesić.

Aby znaleźć problem, uruchomiłem drugą instancję VS i podłączyłem jej debugger do pierwszego, który miał załadowane moje rozwiązanie (Debug | Attach to Process). Następnie w Debug | Wyjątki: aktywowałem włamanie do wyjątków Wyjątek dla języka wspólnego. Teraz, w mojej pierwszej instancji VS, dwukrotnie kliknąłem formularz, aby go otworzyć.

Mam wiele wyjątków z rzędu, z których większość nie miała nic wspólnego z moim kodem. Ale jednym z nich był wyjątek FileLoadException stwierdzający: "Nie można załadować pliku lub zestawu" XXX, wersja = 3.7.0.25089, ... "Dodałem więc odniesienie do poprawnej wersji zespołu. (I przez poprawne, mam na myśli do ostatniej cyfry - projektant WinForm jest strasznie pedantyczny, jeśli chodzi o wersje montażowe.) A następnie wiem, że forma otwiera się jak urok!

+0

To brzmi jak dobre obejście mnie. Podczas migracji naszego projektu z VS2008 do VS2012 stworzyliśmy także nugets z naszych mniejszych projektów kończących się wersją-piekłem. Spróbuję tego co zasugerowałeś i poszukaj złych numerów wersji w naszych odnośnikach DLL – LazyGeek

Powiązane problemy