InvalidOperationException When calling ResourceManager.GetSt
本文关键字:GetSt ResourceManager calling When InvalidOperationException | 更新日期: 2023-09-27 18:19:19
我的应用程序偶尔会抛出异常:
异常类型:InvalidOperationException收集被修改;不能执行枚举操作。
这里是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)
下面是我的代码:
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;
}
有人能帮忙吗?太奇怪了!
经过长时间的检查,我找到了根本原因。下面是我的代码导致上面的问题:
AppDomain.CurrentDomain.GetAssemblies().
因为这个方法试图加载生成的程序集,如"web_adg_gfgt_dfd.dll",它们可以在IIS回收时被删除。所以要修复它,我们只需要避免加载"生成的程序集"。
因此,我们有两种方法来修复 :1。过滤器"生成的程序集":
AppDomain.CurrentDomain.GetAssemblies().Where(i => i.IsDynamic == false).ToList()
2。使用如下方法:
BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList()
Actually InvalidOperationException异常消息:Collection被修改;枚举操作不能执行意味着:
在使用foreach遍历集合的同时修改集合中的元素。
我想这应该能解决你的问题。
foreach (var func in list.ToList())
{
//Do your stuff
}