2015-10-27 14 views
5

Meine Anwendung gelegentlich die Ausnahme werfen:InvalidOperationException Beim Aufruf ResourceManager.GetString

Ausnahmetyp: InvalidOperationException Ausnahmemeldung: Auflistung wurde geändert; Aufzählungsoperation 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<Function> MapWithLanguage(IList<Function> 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<Function>(); 
    foreach (var func in list) 
    { 
     newList.Add(new Function 
     { 
      Name = rm.GetString("Menu_" + func.FunctionId), 
     }); 
    } 
    return newList; 
} 

Wer helfen kann, es ist so komisch!

+1

zeigen Telefonvorwahl – Backs

+0

Do Aktie aus wo diese Ausnahme generiert wurde. – Prabhat

+0

Ich habe gerade meinen Code aktualisiert! Bitte schauen Sie @Backs –

Antwort

2

Nach einer langen Überprüfung, fand ich die Ursache. Und hier ist mein Code Ursache oben Ausgabe:

AppDomain.CurrentDomain.GetAssemblies(). 

Da diese Methode versuchen erzeugten Baugruppen wie „web_adg_gfgt_dfd.dll“ zu laden und sie können entfernt werden, wenn IIS .So recyceln, es zu beheben wir brauchen nur Belastung zu vermeiden "generierte Baugruppen"

Deshalb haben wir 2 Art und Weise für die Befestigung:

1.Filter "erzeugt Baugruppen":

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

2.Using diese Methode:

BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList() 
+2

Schöner Fang! Es wäre noch schöner, wenn jemand bei MS überprüfen könnte, ob dies wirklich auf das Problem mit dem 'ResourceManager.GetString' Fehler zurückzuführen ist, und ob es sich um einen Fehler in der .NET 4 Laufzeit handelt. Zumindest hatte ich dieses Problem nicht, wenn ich die .net 2-Laufzeitumgebung anvisierte. Beginnt erst nach dem Wechsel von Zielframework 3.5 nach 4.6. Vielen Dank! – Fede

+0

@Alex Nguyen, ich sehe nicht "AppDomain.CurrentDomain.GetAssemblies()" in Ihrem Code-Snipet aus Frage – cosset

+0

Ich habe die gleiche Ausnahme, aber rufen Sie nicht AppDomain.CurrentDomain.GetAssemblies() – cosset

-1

Tatsächlich InvalidOperationException Ausnahmemeldung: Sammlung wurde geändert; Aufzählungsoperation darf nicht ausgeführt werden bedeutet:

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

Ich denke, das sollte Ihr Problem lösen.

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

Haben Sie das schon versucht. ?? –

Verwandte Themen