InvalidOperationException Beim Aufrufen von ResourceManager.GetString

Meine Anwendung triggers gelegentlich die Ausnahme aus:

Ausnahmetyp: InvalidOperationException Ausnahmemeldung: Die Sammlung wurde geändert. Enumerationsoperation wird möglicherweise nicht ausgeführt.

Und hier ist Stacktrace

Exception type: InvalidOperationException Exception message: Collection was modified; enumeration operation may not execute. at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark) at System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark) at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark) at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark) at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) at System.Resources.ResourceManager.GetString(String name, CultureInfo culture) 

Und hier ist mein Code:

 public IList MapWithLanguage(IList list) { if (list == null) { return null; } var currentResource = Type.GetType("Fanex.Athena.Models.ViewModel.Menu, Fanex.Athena.Models"); ResourceManager rm = new ResourceManager(currentResource); var newList = new List(); foreach (var func in list) { newList.Add(new Function { Name = rm.GetString("Menu_" + func.FunctionId), }); } return newList; } 

Jeder kann helfen, es ist so komisch!

Nach langem Überprüfen fand ich die Ursache. Und hier ist mein Code Ursache oben:

 AppDomain.CurrentDomain.GetAssemblies(). 

Da diese Methode versucht, generierte Assemblys wie “web_adg_gfgt_dfd.dll” zu laden, und diese entfernt werden können, wenn IIS recycelt.

Daher haben wir 2 Möglichkeiten zur Fixierung:

1.Filter “generierte Baugruppen”:

 AppDomain.CurrentDomain.GetAssemblies().Where(i => i.IsDynamic == false).ToList() 

2.Mit dieser Methode:

 BuildManager.GetReferencedAssemblies().Cast().ToList() 

Tatsächlich InvalidOperationException Ausnahmemeldung: Die Auflistung wurde geändert. Enumerationsoperation führt möglicherweise nicht aus:

Wir ändern die Elemente in der Sammlung, während wir sie mit foreach durchlaufen.

Ich denke, das sollte dein Problem lösen.

 foreach (var func in list.ToList()) { //Do your stuff }