首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用InvalidOperationException时ResourceManager.GetString

调用InvalidOperationException时ResourceManager.GetString
EN

Stack Overflow用户
提问于 2015-10-27 08:31:46
回答 2查看 1K关注 0票数 9

我的应用程序偶尔抛出异常:

异常类型: InvalidOperationException异常消息:集合已被修改;枚举操作可能不会执行。

下面是堆栈跟踪

代码语言:javascript
复制
    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)

这是我的密码:

代码语言:javascript
复制
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;
}

有人能帮忙吗?太奇怪了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 04:26:53

经过很长时间的检查,我找到了根本原因。以上是我的代码原因:

代码语言:javascript
复制
AppDomain.CurrentDomain.GetAssemblies().

由于此方法试图加载生成的程序集(如"web_adg_gfgt_dfd.dll“),并且在IIS .So修复它时可以删除它们,因此我们只需要避免加载”生成的程序集“。

因此,我们有两种方法来固定:

1.过滤“生成的程序集”:

代码语言:javascript
复制
AppDomain.CurrentDomain.GetAssemblies().Where(i => i.IsDynamic == false).ToList()

2.使用这一方法:

代码语言:javascript
复制
BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList()
票数 4
EN

Stack Overflow用户

发布于 2015-10-27 16:55:54

实际上,InvalidOperationException异常消息:集合已被修改;枚举操作可能不会执行方式:

我们正在更改集合中的元素,同时使用foreach对其进行循环。

我觉得这应该能解决你的问题。

代码语言:javascript
复制
foreach (var func in list.ToList())
{
//Do your stuff
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33363057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档