System.EntryPointNotFoundException并行输出红色

时间:2017-01-17 20:44:58

标签: c# parallel-processing

我遇到了一些小问题,但我似乎无法看出它出了什么问题,有人可以帮助我:

Loadassembly fn

public static Assembly LoadAssembly(string assemblyfile)
        {
            Assembly library;
            using (var fs = File.Open(assemblyfile, FileMode.Open))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] buffer = new byte[1024];
                    int read;
                    while ((read = fs.Read(buffer, 0, 1024)) > 0)
                        ms.Write(buffer, 0, read);
                    library = Assembly.Load(ms.ToArray());
                }
            }
            return library;
        }

public static string[] GetDLLInfo(string assemblyfile, bool onlyNameSpace)
            {
                var strAssembly = LoadAssembly(assemblyfile).GetTypes();
                List<string> classList = new List<string>();

                var xx = strAssembly.Select(t => t.Namespace).Distinct().ToList();
                var nmSpaceLiStrings = xx.ToArray();

                Parallel.ForEach(nmSpaceLiStrings, x =>
                {
                    var types = strAssembly.Where(t => t.IsClass && t.Namespace == x).ToList();
                    types.ForEach(t => classList.Add(t.FullName));
                });

                /* foreach (var x in nmSpaceLiStrings)
                {
                    var types = strAssembly.Where(t => t.IsClass && t.Namespace == x).ToList();
                    types.ForEach(t => classList.Add(t.FullName));
                } */

                if (onlyNameSpace)
                {
                    return nmSpaceLiStrings;
                }
                return classList.ToArray();
            }

如果我使用&#39; foreach&#39;它有点奇怪。 (不是平行的,我在输出对话框中没有收到任何警告,但是当我使用&#39; parallel&#39;我得到了:

A first chance exception of type 'System.EntryPointNotFoundException' occurred in mscorlib.dll

我的并行出错了并告诉我正确的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用ConcurrentBag&lt; T&gt;?而不是将类名添加到列表中?

答案 1 :(得分:0)

什么是LoadAssembly方法?它是如何申报的?该异常意味着dll中不存在某些方法。所以问题出在程序集本身或LoadAssembly声明中。